我正在尝试创建一个OpenGLES 2.0多维数据集应用程序。这个想法是将纹理( alpha为75%)应用于立方体的所有6个面。这意味着,即使我旋转立方体,我也可以在任何给定的帧上看到所有6个面。现在我已经启用了深度测试(我的应用需要深度测试!!)和混合。深度函数为LEQUAL,混合函数为SRC_ALPHA,ONE_MINUS_SRC_ALPHA。
现在,问题是在某些立方体表面没有显示底层的面。我不能理解这一点,因为这个逻辑在其他立方体表面上工作得很好。仅供记录,我已经禁用了CULL_FACE。
提前谢谢。
致以敬意,
迷惑者
发布于 2010-06-09 17:48:59
面是按照定义的顺序绘制的。现在,当立方体被旋转时,它们的绘制顺序不会改变。一些面首先被绘制到靠近摄影机的位置。然后绘制一些人脸,但是Z-test说已经有一个像素离相机更近了,所以不需要绘制。
这里的问题是,OpenGL|ES 2.0不会在渲染面时对其进行排序。在3D编程中,正确处理透明度和深度仍然是一个真正的挑战,但对于像这样的简单情况,您可以将面部从后到前排序。向后绘制称为"Painter's algorithm“,排序称为”深度排序“或”z排序“。
简单的,绝对不是最好的,而且肯定是低效的方式可能是这样工作的:
通过计算三个顶点的平均值来计算人脸的中心顶点,通过相机( vertices
一样
有更好的方法来处理这个问题,并且有各种各样的高级优化。但是我没有找到像这样的简单案例的教程。也许我只是没有找到正确的关键字。
https://stackoverflow.com/questions/2979749
复制相似问题