1

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

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

我正在使用混合功能:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

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

我在这里缺少一些非常基本的东西吗?任何帮助将不胜感激,因为我将在几周内将其作为课程项目提交,并且非常希望它能够正常工作。

4

1 回答 1

0

让我分解一下:

首先绘制透明对象。

此时会发生两件事:

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

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

这个问题的解决方案是从后到前绘制你的场景(从更远的地方开始绘制)。

希望有帮助。

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

于 2010-10-21T10:57:13.013 回答