我正在尝试转换OGL es1.1。代码到GLKit。GLKit提供一对纹理插槽:
每个纹理都有一个env模式:
通常,您将texture2d1保留为空白,只需设置texture2d0。我从阅读苹果的文档中推测,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];...and我所得到的只是一个黑色的非纹理。无论是纹理,放在0中(1中没有任何纹理),效果都很好。第二个纹理是阴影阿尔法到白色,其中第一个纹理都是不透明的,但与相当丰富的苍白。
我真正想做的是开始高效地应用动态生成/更新的混合。例如:
注:我不想扔掉GLKit和写自定义着色器,而不是这样。我想了解GLKit是如何工作的--从外观上看,对于这样简单的事情,维护起来应该比我编写一堆着色器要容易得多。
发布于 2013-09-05 22:57:24
如文件所述,GLKTextureEnvModeModulate将纹理的颜色值相乘,这可能就是你看到黑色的原因。如果您想要将一个纹理与alpha覆盖在没有纹理的顶部,则使用GLKTextureEnvAttribDecal代替。
我看不出有什么方法可以只使用GLKit API来实现动态混合掩码的想法,但是您不必完全抛弃它。试着做这样的事情:
texture0和FBO纹理作为texture1与您的GLKBaseEffect和渲染您的主要场景到屏幕。它可能比片段着色器在一次渲染过程中完成所有操作的效率要低,但是它应该能工作。
https://stackoverflow.com/questions/10654319
复制相似问题