1
我的项目是一个使用OpenGL 2.0和GLKit的IOS应用程序。 简而言之,我有一个透明背景的明星纹理,我想应用在广场上。期望的最终结果是看到一颗星星;不是广场上的明星。OpenGL- GLKit:透明对象和纹理
我当前的问题是,当我在正方形上应用纹理时,我看到一个由其材质颜色变量定义的彩色正方形的星。我希望看到的只有明星,并让方形的其余部分透明。
的代码如下:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
[effectTmp prepareToDraw];
glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(ColoredVertexData3D), &vertexDataTexture[0].vertex);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, sizeof(ColoredVertexData3D), &vertexDataTexture[0].normal);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(ColoredVertexData3D), &vertexDataTexture[0].color);
glDrawArrays(GL_TRIANGLES, 0, [drawObjectTmp getSizeFromVertexIndicesArray]);
glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribTexCoord0);
glDisableVertexAttribArray(GLKVertexAttribNormal);
glDisable(GL_BLEND);
而envMode设为GLKTextureEnvModeDecal如下:
effect.texture2d0.envMode = GLKTextureEnvModeDecal;
也许在走廊里有一头大象我没有看到;并欢迎任何帮助或指针,以帮助看到它的透明正方形的明星。
干杯, 斯特凡
你好,是的,你是绝对正确的; envModeDecal就是其中之一。我误以为它对纹理显示有影响。这个错误比我想象的要多一点:基本上我的应用程序通过OBJ导入搅拌机模型。背景模型在使用alpha的模型之后被处理;导致alpha模型中的黑色纹理,因为背景尚未计算。更改Blender中创建的顺序的方法是:) – stephane
*注意*:Decal允许底层几何体通过纹理的透明部分显示,其中'GL_MODULATE'将纹理颜色与底层像素相乘,因此透明部分纹理变成透明几何体。不管几何看起来如何,GLKTextureEnvModeReplace只是踩踏纹理的像素。 – Olie