【问题标题】:OpenGL ES multi-texture alpha blending questionOpenGL ES多纹理alpha混合问题
【发布时间】:2009-12-23 13:09:40
【问题描述】:
这可能是一个菜鸟问题,但是,我一直无法找到合适的答案:
我在 OpenGL ES 中有一个对象(实际上是 Blender 的一个 UV 映射导出),我想对其应用两个纹理。准确地说,我有一个类似地球的球体,我想为它添加两个纹理(白天和夜晚)。
我曾想过,通过 alpha 映射,应该可以在运行时以编程方式淡化一个纹理并显示另一个纹理,这样我的地球仪就成为地球的真实模拟。我有它背后的数学,即为对象的每个面创建 alpha-map 不是问题。
任何提示/指针如何实现这一点?
谢谢
【问题讨论】:
标签:
iphone
opengl-es
textures
alphablending
【解决方案1】:
您正在寻找的效果可以在 OpenGL ES 1.1 中使用texture combiners 来实现。默认情况下,您启用的每个纹理单元都设置为将前一阶段的输出乘以当前纹理的颜色。在第一个纹理单元的情况下,前一阶段只是顶点颜色。通过更改纹理组合器状态,您可以添加、减去、插值或取纹理样本的点积。
链接页面上的第二个和第三个示例在两个纹理之间进行插值,应该与您尝试执行的操作非常相似。如果您比较两个示例的源代码,您应该会发现它们几乎相同,除了 GL_SRC2_RGB/GL_SRC2_ALPHA 和 GL_OPERAND2_RGB/GL_OPERAND2_ALPHA 的配置。您需要在此处指定的内容取决于您在何处/如何为两个纹理生成混合因子。您可以通过为GL_SRC2_* 指定GL_PRIMARY_COLOR 来获取顶点颜色,示例中未显示。
(注意:我链接到的页面建议使用 GLSL 而不是纹理组合器。不幸的是,如果您的软件需要在不支持 OpenGL ES 2.0 的旧硬件上运行,这不是一个选项。)