首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenGL ES 2.0中写入深度缓冲区/深度值的解决方法

在OpenGL ES 2.0中写入深度缓冲区/深度值的解决方法
EN

Stack Overflow用户
提问于 2012-07-05 14:56:43
回答 1查看 2.3K关注 0票数 7

我需要在安卓设备(OpenGL ES2.0)上写入深度缓冲区。由于gl_FragDepth在OGL es2.0下是不可写的,所以我必须找到一个变通方法。我实际上想通过光线投射来渲染球体,类似于这个:http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20。然而,本网站上解释的解决方案(屏幕外渲染通道使用特殊的glBlendEquation编写深度)仅适用于苹果设备,而不适用于安卓系统,因为GL_MIN_EXT-blending不受支持。

在我的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?),但它在安卓设备上也不可用。

最后,当然可以只为一个球体编写深度缓冲区(在屏幕外渲染过程中),然后在第二个渲染过程中为下一个球体写入深度缓冲区,并在第三个渲染过程中组合这两个球体。在这样做的时候,你将会有n个球体的2*n+1渲染过程-这似乎是非常低效的!

所以,既然我的想法快用完了,我的问题是:你能想出另一种通用的方法/变通方法来在OpenGL ES2.0Android设备上编写深度缓冲区吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-05 16:03:31

好吧,你肯定没得选了。我不知道任何进一步的解决办法,因为我对Opengl不是很了解。

我脑海中唯一想到的就是将暴力多通道方法与一些预处理结合起来:

对球体进行分组,在这些组中原子不会相互重叠。应该可以将你所有的球体从少于十个组的蛋白质中进行分类。然后在一个过程中渲染每个组的所有球体。顶点深度在这里就足够了,因为球体不重叠。然后你可以对结果进行“深度混合”。

这需要一些预处理,这可能是一个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11339222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档