1

デプスクランプはデプステストの前またはデプステストの後に発生しますか?座標が1.0以上-1.0未満のプリミティブをレンダリングし、深度テストで深度クランプを使用しています。しかし、深度テストを有効にすると、ジオメトリはレンダリングされません。

これが私のコードです:

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,

0.5f,-0.5f,-0.5f,
-0.5f,-0.5f,-0.5f,
-0.5f,0.5f,-0.5f,
0.5f,0.5f,-0.5f  
}

for(int i=0;i<24;i++)
    vertices[3*i+2]*=25;

    glEnable(GL_DEPTH_CLAMP);

        // when i comment stmt below, it draws triangle strips
        glEnable(GL_DEPTH_TEST); 
        glClearDepth(15.0f);
        glClearColor (1.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
        glDrawArrays(GL_TRIANGLE_STRIP,0,6);

デプステストとクランプを一緒に使用するにはどうすればよいですか?

上記のコードが深度テストを有効にした状態で画面に何も描画しないのはなぜですか?

4

1 に答える 1

4

OpenGL 4.3、17.3.6から:

デプスクランプ(セクション13.5を参照)が有効になっている場合、入ってくるフラグメントのz wが比較される前に、z wは範囲[min(n; f);にクランプされます。max(n; f)]


デフォルトではGL_LEQUALだと思います。

そのため、何が起こっているのかわからない場合は、完全に機能する例を投稿する必要があります。デフォルトの深度テストはGL_LESSです。1.0は1.0以上であるため、すべての0.5深度頂点が深度テストに失敗します。

また、あなたのループ:

vertices[3*i+2]*=25

これはメモリの上書きです。インデックスには24個の要素しかないため、インデックスは配列の最後から遠く離れています。あなたはおそらく8をループするつもりでした。

于 2013-01-15T06:57:24.917 に答える