我正在尝试转换 OGL ES 1.1。GLKit 的代码。GLKit 提供了一对纹理槽:
- 纹理2d0
- 纹理2d1
每个纹理都有一个环境模式:
- GLKTextureEnvModeReplace,
- GLKTextureEnvModeModulate,
- GLKTextureEnvModeDecal
通常,您将 texture2d1 留空,然后设置 texture2d0。我假设 - 从阅读 Apple 的文档中 - 2d1 用于混合/组合/修改纹理。由于 GLKit “仅仅”位于着色器之上,并且每个着色器都有一对纹理槽是标准的 - “传入”槽表示材质上已有的内容,“修改”槽表示着色器的内容将用作修改材料的参数。
但这似乎不起作用。
我试过了:
self.baseEffect.texture2d0.envMode = GLKTextureEnvModeReplace;
self.baseEffect.texture2d0.target = GLKTextureTarget2D;
self.baseEffect.texture2d0.name = [earthTextureDefault name];
self.baseEffect.texture2d1.envMode = GLKTextureEnvModeModulate;
self.baseEffect.texture2d1.target = GLKTextureTarget2D;
self.baseEffect.texture2d1.enabled = TRUE;
self.baseEffect.texture2d1.name = [textureClouds name];
...我得到的只是黑色的无纹理。放置到 0 中的任一纹理(1 中没有任何内容)都可以正常工作。第二个纹理是 alpha 到白色的阴影,其中第一个纹理是不透明的,但具有相当丰富的调色板。
我真正想做的是开始有效地应用动态生成/更新的混合。例如:
- 加载基础纹理
- 加载第二个纹理
- 加载在它们之间混合的混合蒙版
- ...逐帧更新混合蒙版。无需重新上传前两个纹理
注意:我不想扔掉 GLKit 并为此编写自定义着色器。我想了解 GLKit 是如何工作的——从外观上看,对于像这样的简单事情,维护起来应该比我到处写一堆着色器要容易得多。