首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGLES iPhone深度混合问题

OpenGLES iPhone深度混合问题
EN

Stack Overflow用户
提问于 2010-06-05 16:57:22
回答 1查看 577关注 0票数 0

我正在尝试创建一个OpenGLES 2.0多维数据集应用程序。这个想法是将纹理( alpha为75%)应用于立方体的所有6个面。这意味着,即使我旋转立方体,我也可以在任何给定的帧上看到所有6个面。现在我已经启用了深度测试(我的应用需要深度测试!!)和混合。深度函数为LEQUAL,混合函数为SRC_ALPHA,ONE_MINUS_SRC_ALPHA。

现在,问题是在某些立方体表面没有显示底层的面。我不能理解这一点,因为这个逻辑在其他立方体表面上工作得很好。仅供记录,我已经禁用了CULL_FACE。

提前谢谢。

致以敬意,

迷惑者

EN

回答 1

Stack Overflow用户

发布于 2010-06-09 17:48:59

面是按照定义的顺序绘制的。现在,当立方体被旋转时,它们的绘制顺序不会改变。一些面首先被绘制到靠近摄影机的位置。然后绘制一些人脸,但是Z-test说已经有一个像素离相机更近了,所以不需要绘制。

这里的问题是,OpenGL|ES 2.0不会在渲染面时对其进行排序。在3D编程中,正确处理透明度和深度仍然是一个真正的挑战,但对于像这样的简单情况,您可以将面部从后到前排序。向后绘制称为"Painter's algorithm“,排序称为”深度排序“或”z排序“。

简单的,绝对不是最好的,而且肯定是低效的方式可能是这样工作的:

通过计算三个顶点的平均值来计算人脸的中心顶点,通过相机( vertices

  • Project )将它们转换到屏幕空间,并可能通过某种排序的顶点缓存( model-matrices

  • Sort algorithm

  • Build
  1. view+projection)来计算它们的Z值,或者只需按新的顺序重写索引缓冲区(如果顶点不变,则减少移动的内容)
  2. 渲染立方体与通常的

一样

有更好的方法来处理这个问题,并且有各种各样的高级优化。但是我没有找到像这样的简单案例的教程。也许我只是没有找到正确的关键字。

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

https://stackoverflow.com/questions/2979749

复制
相关文章

相似问题

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