2010-06-05 80 views
0

我想做一个OpenGLES 2.0多维数据集应用程序。 这个想法是对立方体的所有6个面应用纹理(使用75%的alpha)。 这意味着即使我旋转立方体,我也能在任何给定的框架中看到所有6个面。现在我已经启用了深度测试(我的应用需要这个!!)和混合。深度func是LEQUAL,混合函数是SRC_ALPHA,ONE_MINUS_SRC_ALPHA。OpenGLES iPhone深度混合问题

现在,问题是在某些立方体面孔不显示底层面孔。我无法理解这一点,因为这个逻辑对其他立方体的面很好。只是为了记录,我禁用了CULL_FACE。

在此先感谢。

问候,

益智游戏

回答

2

面,以便它们被定义绘制。现在随着立方体的旋转,它们的绘制顺序不会改变。首先将一些脸部靠近相机。然后再绘制一张脸,但Z-test表示已经有一个像素更靠近相机,因此不需要进行绘制。

这里的问题在于,OpenGL | ES 2.0在渲染时不排序面。在3D编程中正确处理透明度和深度仍然是一个真正的挑战,但对于这种简单的情况,您可以将面部排列在前面。回到前面被称为“画家的算法”,排序被称为“深度排序”或“z排序”。

简单的,我确定不是最好的,当然效率低下的方式可能像这样工作:通过计算三个 顶点

  • 他们计划到屏幕空间平均通过改造他们的脸 的

    1. 计算中心顶点相机(视图+投影)和可能的模型矩阵
    2. 按某种排序算法对其Z值进行排序
    3. 按此顺序构建具有顶点的顶点缓冲区或只是重写索引新订单缓冲(少的东西,如果顶点不改变走动)
    4. 渲染立方体像往常一样

    有更好的方法来处理这个问题,有各种先进的优化在那里。但我没有找到任何教程来涵盖这样的简单情况。也许我只是没有找到正确的关键字。

  • +0

    感谢您的回复。 会试试这个 – user359103 2010-06-10 06:10:34