我需要在Android設備(OpenGL ES 2.0)上寫入深度緩衝區。由於gl_FragDepth
在OGL ES 2.0下不可寫,所以我必須找到解決方法。我實際上想通過光線投射渲染球體,類似於:http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20。 但是,本網站解釋的解決方案(屏幕渲染通道使用特殊的glBlendEquation
編寫深度)僅適用於Apple設備,而不適用於Android,因爲GL_MIN_EXT
-blending不受支持。在OpenGL ES 2.0中寫入深度緩衝區/深度值的解決方法
在我的Tegra3平板電腦,我能夠實現這個方法:Android GLES20.glBlendEquation not working?(順便說一句,我建議使用線性化的深度值,他們給出更好的結果!) 它的工作原理相當不錯,當然,這僅僅是在NVIDIA GPU可用。
理論上,擴展名爲GL_EXT_frag_depth
(請參閱Can an OpenGL ES fragment shader change the depth value of a fragment?),但它在Android設備上也不可用。最後,你當然可以爲一個球體寫入深度緩衝區(在離屏渲染過程中),然後在第二個渲染過程中寫入下一個球體的深度緩衝區,並在第三個渲染過程中合併這兩個球體。在這樣做的時候,你會有2 * n + 1個n球的渲染通道 - 這似乎效率很低!
所以,因爲我用完了想法,我的問題是:您是否可以考慮另一種通用方法/解決方法來在OpenGL ES 2.0 Android設備上編寫深度緩衝區?
這聽起來像一個有趣的選擇!沒有我期望的那麼優雅的解決方案,但似乎沒有其他的......我可能會試一試。對於大多數蛋白質和其他小分子,深度排序應該足夠快。 – kroneml