OpenGL ES for iPhone混合不起作用

时间:2010-10-21 10:50:45

标签: iphone opengl-es alpha alphablending texture-mapping

我是3D图形的初学者,我正在尝试为iPhone制作3D游戏,更具体地说,是使用包含透明度的纹理。我能够将纹理(8位.png文件)加载到OpenGL中并将其映射到正方形(由三角形条带制成)但是当我在模拟器中运行应用程序时,图像的透明部分不透明 - 它们拍摄背景颜色,无论它设置的是什么,但是模糊了更远的图像。我无法发布截图,因为我是新用户,所以我为此道歉。我会尝试上传并以其他方式链接它。

更令人讨厌的是,当我将图像加载到Apple的GLSprite示例代码中时,它完全按照我的意愿工作。我已将GLSprite的setupView中的代码复制到我的项目中,但仍然无法正常工作。

我正在使用混合功能:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

我的印象是这对我想做的事情是正确的。

我在这里缺少一些非常基本的东西吗?任何帮助都会非常感激,因为我会在几周内将其作为课程作业提交,并且非常希望它可以工作。

1 个答案:

答案 0 :(得分:0)

让我打破这个:

首先绘制透明对象。

此时发生了两件事:

  • 像素被正确绘制到后台缓冲区
  • 深度缓冲区像素设置在深度缓冲区中。请注意,深度缓冲区将在整个对象上写入值,透明度不会影响它。

然后在透明对象后面绘制其他对象。 但是不会绘制任何这些对象像素,因为它们的深度缓冲值小于已经绘制的值。

这个问题的解决方案是将你的场景从前面画回来(从更远的地方开始画画)。

希望有所帮助。

编辑:我假设你在这里使用深度缓冲区。如果这不正确,我会考虑写另一个答案。