6

我已经在 iPhone 上使用 OpenGL ES 1.1 10 个月了,在那段时间里,有一个看似简单的任务我一直无法完成:以编程方式淡化纹理对象。为了简单起见:如何在代码控制下进行 alpha 渐变,一个简单的 2D 三角形应用了纹理(带有 alpha)。我想在场景上淡入/淡出它,而不是简单的彩色背景。到目前为止,我必须这样做的唯一技术是创建一个纹理,上面有多个褪色前的纹理副本。(呸)

例如,我无法使用 Apple 的 GLSprite 示例代码作为起点来执行此操作。它已经使用具有自己 alpha 的纹理对四边形进行了纹理处理。我想淡入淡出该对象。

4

2 回答 2

15

也许我没有让你正确,但对我来说这似乎微不足道,我一直在成功地做我的应用程序。要走的路是:

  1. 启用纹理和您需要的一切
  2. 启用混合:glEnable(GL_BLEND)
  3. 选择混合模式glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
  4. 设置要混合的颜色:glColor4f(r * a, g * a , b * a, a)
  5. 画出你的几何图形

混合功能适用于使用预乘颜色/纹理的porter-duff 。GL_TEXTURE_ENV_MODE必须设置为,GL_MODULATE但这是默认设置。

于 2009-10-15T13:12:34.790 回答
2

Nikolai 的解决方案是正确的;请忽略我在 Apple 论坛上所说的话。由于纹理是预乘的,所以每个顶点的颜色也应该是。您应该使用GL_ONE而不是GL_SRC_ALPHA,并执行以下操作:

glColor4f(1., 1., 1., myDesiredAlpha);
glColor4f(myDesiredAlpha, myDesiredAlpha, myDesiredAlpha, myDesiredAlpha);
于 2009-10-16T17:30:41.303 回答