OpenGL ES多纹理alpha混合问题

时间:2009-12-23 13:09:41

标签: iphone opengl-es textures alphablending

这可能是一个noob问题,但是,我找不到合适的答案:

我在OpenGL ES中有一个对象(实际上是Blender的UV映射导出),我想对它应用两个纹理。确切地说,我有一个类似地球的球体,我想在它上面添加两种纹理(日间和夜间)。

我曾经想过通过alpha映射,应该可以在运行时以编程方式淡化一个纹理并显示另一个纹理,这样我的地球就可以成为地球的真实模拟。我有它背后的数学,即为对象的每个面创建alpha映射不是问题。

任何提示/指示如何实现这一目标?

由于

1 个答案:

答案 0 :(得分:5)

您正在寻找的效果可以通过OpenGL ES 1.1中的texture combiners来实现。默认情况下,您启用的每个纹理单元都设置为将前一阶段的输出乘以当前纹理的颜色。在第一个纹理单元的情况下,前一个阶段只是顶点颜色。通过更改纹理合并器状态,您可以添加,减去,插入或取代纹理样本的点积。

链接页面上的第二个和第三个示例(在两个纹理之间进行插值)应该与您尝试执行的操作非常相似。如果您比较两个示例的源代码,您应该看到它们几乎相同,但GL_SRC2_RGB / GL_SRC2_ALPHAGL_OPERAND2_RGB / GL_OPERAND2_ALPHA的配置除外。您需要在此处指定的内容取决于您为两个纹理生成混合因子的位置/方式。您可以通过为GL_PRIMARY_COLOR指定GL_SRC2_*来为顶点颜色提供源代码,但未在示例中显示。

(注意:我链接的页面建议使用GLSL而不是纹理合并器。如果您的软件需要在不支持OpenGL ES 2.0的较旧硬件上运行,那么很遗憾这不是一个选项。)