Android デバイス (OpenGL ES 2.0) の深度バッファーに書き込む必要があります。gl_FragDepth
OGL ES 2.0 では書き込みができないため、回避策を見つける必要があります。私は実際にこれに似たレイキャスティングを介して球をレンダリングしたい: http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20。ただし、この Web サイトで説明されているソリューション (特別な を使用して深度を書き込むオフスクリーン レンダー パスglBlendEquation
) は、Apple デバイスでのみ機能し、Android では機能しません。これは、 GL_MIN_EXT
-blending がサポートされていないためです。
私の Tegra3 タブレットでは、次のメソッドを実装できました: Android GLES20.glBlendEquation not working? (ちなみに、線形化された深度値を使用することをお勧めします。より良い結果が得られます!)これは非常にうまく機能しますが、もちろん、これは Nvidia GPU でのみ使用できます。
理論的には拡張機能がありますGL_EXT_frag_depth
(「OpenGL ES フラグメント シェーダーはフラグメントの深度値を変更できますか? 」 を参照してください) が、Android デバイスでも使用できません。
最後に、(オフスクリーン レンダー パスで) 1 つの球だけの深度バッファーを書き込んでから、2 番目のレンダー パスで次の球の深度バッファーを書き込んで、3 番目のレンダー パスで 2 つを組み合わせることができます。そうすることで、n 個の球に対して 2*n+1 のレンダー パスが必要になります。これは非常に非効率的です。
アイデアが不足しているので、私の質問は次のとおりです。OpenGL ES 2.0 Android デバイスで深度バッファを書き込むための別の一般的な方法/回避策を考えられますか?