0

这可能是一个菜鸟问题,但是,我无法找到合适的答案:

我在 OpenGL ES 中有一个对象(实际上是 Blender 的 UV 映射导出),我想对其应用两个纹理。准确地说,我有一个类似地球的球体,我想向它添加两个纹理(一个白天和一个夜晚)。

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

任何提示/指针如何实现这一点?

谢谢

4

1 回答 1

5

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

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

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

于 2009-12-24T07:58:17.397 回答