Android OpenGLES2.0で深度バッファーを正しく機能させることができません。私が何をするかに関係なく、オブジェクトは常に提供された順序でレンダリングされ、デプスバッファを完全に無視します。
私が読んだことから、デフォルトのセットアップにはデプスバッファーが必要ですが、それでも、それを機能させるために考えられるすべての関数を試しました。
//setup
setEGLContextClientVersion(2);
setEGLConfigChooser( true );
GLES20.glEnable( GLES20.GL_DEPTH_TEST );
GLES20.glDepthFunc( GLES20.GL_LEQUAL );
GLES20.glDepthMask( true );
//render
GLES20.glClearColor(0.8f, 0.5f, 0.8f, 1.0f);
GLES20.glClearDepthf(1.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
z軸の0.5、0.0、-0.5にオブジェクトを配置しています。パースペクティブビューを使用すると、オブジェクトのサイズが正しく変更されるため(遠いオブジェクトは小さい)、これが機能することを確認できます。頂点シェーダーは、ビューマトリックスを適用するだけです。私が正しければ、ESのフラグメントシェーダーの深さをまったく変更できないので、間違いはありません。
私は困惑しています。他に何をチェックできるか本当にわかりません。私が(Webまたはここで)行うすべての検索は、問題を解決していないように見える答えを提供します(ただし、他の理由で問題が発生したことを示しています)。ES 2.0のほとんどの例には、実際には深度バッファーをテストするのに十分なオブジェクトがないため、サンプルコードも正しいとは言えません。
コメントするには:レンダラーを設定する前に、派生したGLSurfaceView内で「super」を呼び出した直後に「setup」セクションが呼び出されます。「render」部分は、私のrenderes「onDrawFrame」内で最初に呼び出されます。