OpenGL-GLKit:透明对象和纹理

时间:2012-11-07 22:27:55

标签: iphone textures transparent glkit

我的项目是使用OpenGL 2.0和GLKit的IOS应用程序。 简而言之,我有一个透明背景的星星纹理,我想在广场上应用。期望的最终结果是看到一颗星;不是广场上的明星。

我目前的问题是,当我在正方形上应用纹理时,我会看到一个由其材质颜色变量定义的带有彩色正方形的星形。我想要的只是看到明星并让方块的其余部分透明。

代码如下:

    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;

走廊里可能有一头大象我没看到;欢迎任何帮助或指针,以帮助看到明星的透明方块。

干杯, 斯特凡

1 个答案:

答案 0 :(得分:3)

docs - GLKTextureEnvModeDecal使用纹理的alpha分量将纹理的颜色与输入颜色混合。

我想你想要GLKTextureEnvModeReplace。