2009-12-23 80 views
0

这可能是一个小白的问题,但是,我一直没能找到一个合适的答案:OpenGL ES的多纹理alpha混合问题

我在OpenGL ES的对象(其实,紫外线映射出口来自Blender),我想对它应用两个纹理。准确地说,我有一个像地球一样的球体,我想添加两个纹理(日边和夜边)。

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

任何提示/指针如何实现?

感谢

回答

5

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

链接页面上的第二个和第三个插入两个纹理之间的示例应该与您尝试执行的操作非常相似。如果您比较两个示例的源代码,则应该看到它们几乎完全相同,除了配置为GL_SRC2_RGB/GL_SRC2_ALPHAGL_OPERAND2_RGB/GL_OPERAND2_ALPHA。你需要在这里指定什么取决于你在哪里/如何生成两个纹理的混合因子。通过为GL_SRC2_*指定GL_PRIMARY_COLOR,您可以从顶点颜色获取信息,这在示例中未显示。如果您的软件需要在不支持OpenGL ES 2.0的较旧硬件上运行,则不幸这不是一种选择。)

(请注意:我链接的页面建议使用GLSL而不是纹理组合器。