5

私の頂点コードは次のとおりです。

GLfloat vertices[]=
    {
        0.5f,0.5f,0.5f,                                   
        -0.5f,0.5f,0.5f,
        -0.5f,-0.5f,0.5f,
        0.5f,-0.5f,0.5f,//face 1

        0.5f,-0.5f,-0.5f,
        -0.5f,-0.5f,-0.5f,
        -0.5f,0.5f,-0.5f,
        0.5f,0.5f,-0.5f,//face 2

        0.5f,0.5f,0.5f,
        0.5f,-0.5f,0.5f,
        0.5f,-0.5f,-0.5f,
        0.5f,0.5f,-0.5f,//face 3                

        -0.5f,0.5f,0.5f,
        -0.5f,0.5f,-0.5f,
        -0.5f,-0.5f,-0.5f,
        -0.5f,-0.5f,0.5f,//face 4

        0.5f,0.5f,0.5f,
        0.5f,0.5f,-0.5f,
        -0.5f,0.5f,-0.5f,
        -0.5f,0.5f,0.5f,//face 5

        -0.5f,-0.5f,0.5f,
        -0.5f,-0.5f,-0.5f,
        0.5f,-0.5f,-0.5f,
        0.5f,-0.5f,0.5f//face 6     

    };

今、私は次のようにzコードを変更しています:

for(int i=0;i<24;i++)
    vertices[i*3+2]*=10
glDepthRange(0,10.0);

現在、glDepthRange 呼び出しにより z コードが -0.5 から 0.5 の範囲にマップされ、適切な立方体が表示されることを期待していますが、上記の glDepthRange 呼び出しを歪んだジオメトリでコメントした場合と同じように o/p が返されます。

4

1 に答える 1

6

manページを引用させてください:

クリッピングと w による除算の後、深さ座標の範囲は -1 から 1 で、近距離と遠距離のクリッピング プレーンに対応します。glDepthRange は、この範囲内の正規化された深度座標のウィンドウ深度座標への線形マッピングを指定します。実際の深度バッファーの実装に関係なく、ウィンドウ座標の深度値は、0 から 1の範囲であるかのように扱われます(色成分と同様)。したがって、glDepthRange によって受け入れられる値は、受け入れられる前に両方ともこの範囲にクランプされます

ハイライト鉱山

つまり、実際には 1 より大きい深度値を使用することはできません。代わりに、自分で適切に計算する必要があります。基本的に、Projection Matrix で適切な値nearを設定し、Modelview Matrix で Z 座標を変換して、すべての最終的な Z が前述の範囲内になるようにします。far

詳細な説明が必要な場合は、コメントを残してください。

于 2013-01-07T12:25:40.710 に答える