1

我的项目是一个使用 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;

可能走廊里有一头我没看到的大象;并且欢迎任何帮助或指针来帮助查看具有透明正方形的星星。

干杯,斯蒂芬

4

1 回答 1

3

来自文档- GLKTextureEnvModeDecal 使用纹理的 alpha 分量将纹理的颜色与输入颜色混合。

我想你想要 GLKTextureEnvModeReplace。

于 2012-11-08T01:24:24.210 回答