2012-07-05 21 views
7

アンドロイドデバイス(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を使用して深度を書き込むオフスクリーン描画パス)は、GL_MIN_EXT -blendingはサポートされていないため、AndroidではなくAppleデバイスでのみ動作します。私は、このメソッドを実装することができた私のTegra3タブレットでOpenGL ES 2.0でデプスバッファ/デプス値を書き込むための回避策

Android GLES20.glBlendEquation not working?(ところで、私は線形化深さの値を使用することをお勧め、彼らはより良い結果を与える!) それはかなり良い作品が、もちろんこれは、NVIDIA GPU上でのみ利用可能です。

理論的には、拡張子はGL_EXT_frag_depthCan an OpenGL ES fragment shader change the depth value of a fragment?参照)ですが、Android搭載端末では利用できません。

最後に、(オフスクリーンのレンダリングパスで)ただ1つの球のデプスバッファを書き、2番目のレンダリングパスに次の球のデプスバッファを書き、3番目のレンダリングパスで2つを結合することができます。そうすることで、n個の球に対して2 * n + 1回のレンダーパスを行うことになります。これは非常に非効率的です!

私はアイデアが不足しているので、私の質問は次のとおりです。OpenGL ES 2.0のAndroidデバイスにデプスバッファを書き込むための一般的な方法/回避策がありますか?

答えて

2

ここではオプションが不足しています。 OpenGL ESをよく知らないので、これ以上の回避策はわかりません。私の心に入ってくる

唯一のことは、いくつかの前に力ずくマルチパスアプローチを組み合わせ、次のようになります。

ソート原子が互いに重複していないグループにあなたの球。 10以下のグループでタンパク質からすべての領域を分類することが可能でなければなりません。次に、各グループのすべての球を1回で描画します。球が重なっていないので、ここでは頂点深さで十分です。次に、結果を「深度ブレンド」することができます。

これにはいくつかの前処理が必要な場合があります。

+0

これは興味深いオプションのように聞こえる!私が望んでいたほどエレガントな解決策ではありませんが、他にはないようです...私はおそらくそれを試してみましょう。深度選別は、ほとんどのタンパク質や他の小さな分子にとっては十分に速いはずです。 – kroneml

関連する問題