我需要在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