OpenGLES iPhone Depth Blending问题

时间:2010-06-05 08:57:22

标签: iphone opengl-es blend depth

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

现在,问题是在某些立方体面上不会显示底层面。我无法理解这一点,因为逻辑与其他立方体面很好地协作。仅供记录,我已禁用CULL_FACE。

提前致谢。

此致

益智游戏

1 个答案:

答案 0 :(得分:2)

按照定义的顺序绘制面。现在,当旋转立方体时,它们的绘制顺序不会改变。有些面孔首先靠近相机。然后在那之后绘制一些面部,但Z-test表示已经有一个像素靠近相机,因此不需要进行绘图。

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

简单,绝对不是最佳且效率肯定低效的方式可能会像这样:

  1. 计算脸部的中心顶点 通过计算三个平均值 顶点
  2. 通过相机(视图+投影)和可能的模型矩阵对它们进行转换,将它们投影到屏幕空间
  3. 按某种排序算法对其Z值进行排序
  4. 按此顺序构建具有顶点的顶点缓冲区,或者只按新顺序重写索引缓冲区(如果顶点未更改,则移动的内容较少)
  5. 照常渲染立方体
  6. 有更好的方法来处理这个问题,还有各种高级优化。但我没有找到任何教程来涵盖这样的简单案例。也许我只是找不到合适的关键词。