1

OpenGL ES 2.0 (エミュレータを搭載した PC) で glDepthFunc を使用しようとしましたが、動作がわかりません。

init 関数では、これらの値の定義のみを呼び出します。

glClearDepthf( 0.5f );
glClearColor ( 1.0f, 0.0f, 0.0f, 0.0f );

そして、描画関数では、このコード:

glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable( GL_DEPTH_TEST );
glDepthFunc(GL_LEQUAL);
glUniform4fv(unifColor, 1, verColor);
glDrawArrays ( GL_TRIANGLE_FAN, 0, 4 );
eglSwapBuffers

緑の四角(画面サイズの半分)を描いています。描かれた正方形の z 値が 0.5 の場合。

深度テストが TRUE になり、緑色の正方形が描画されることを期待していますが、赤い画面 (クリア カラーで使用される色) しか表示されません。明確な深度値を 1.0 に定義すると、期待される動作が得られます: 赤い画面に grren squar が表示されるため、必要に応じて深度が使用されると思います (すべての初期化された深度の定義)。

何が問題になる可能性がありますか?

ご協力いただきありがとうございます

4

1 に答える 1

0

うまくいかないことがいくつかあります。精度の問題があるかもしれません。ただし、ここでいくつかの推測があります。

緑の四角(画面サイズの半分)を描いています。描かれた正方形の z 値が 0.5 の場合。

(x, y, 0.5, 1) のようなものを書き込むと、ウィンドウ空間の z 値は 0.5 ではなく 0.75 になりますgl_Position。[-1,1] の NDC 座標は深度範囲(デフォルトでは [0,1]) にマッピングされます。z=0 で描画して、ウィンドウ スペースの z 値を 0.5 にしてみてください (さらに精度の問題に備える必要があります)。これはすべて、もちろん、特にパースペクティブがないことを前提としています。

于 2013-10-06T15:52:28.207 に答える