我正在尝试转换OGL ES 1.1。代码到GLKit。 GLKit提供了一对纹理槽:
每个纹理都有一个env模式:
通常,您将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-to-white阴影,第一个纹理都是不透明的,但是有一个相当丰富的pallette。
我真正想做的是开始有效地应用动态生成/更新的混合。 e.g:
注意:我不打算扔掉GLKit并为此编写自定义着色器。我想了解GLKit是如何工作的 - 而且对于像这样的简单事物来说,它应该是一个很容易维护的东西,而不是像我在编写一堆着色器时那样。
答案 0 :(得分:0)
As noted in the documentation,GLKTextureEnvModeModulate
将纹理的颜色值相乘,这可能就是你看到黑色的原因。如果您想在纹理上覆盖纹理顶部的纹理,请改用GLKTextureEnvAttribDecal
。
我没有看到只使用GLKit API进行动态混合蒙版构思的方法,但您不必完全抛弃它。尝试这样的事情:
texture0
,将FBO纹理用作texture1
GLKBaseEffect
,并将主要场景渲染到屏幕上。它可能不如片段着色器在一个渲染过程中完成所有效果,但它应该可以工作。