【问题标题】:Texture alpha channel does not work in opengl纹理 Alpha 通道在 opengl 中不起作用
【发布时间】:2013-01-25 09:35:11
【问题描述】:

如何使用带有 Alpha 通道的图像?从现在开始我已经尝试过这个:

glTexImage2D(GL_TEXTURE_2D,
             0,
             GL_RGBA,
             width, height,
             0,      
             GL_BGRA,
             GL_UNSIGNED_BYTE,
             bits);

使用这个 opengl 命令:

glBindTexture(GL_TEXTURE_2D, texgun5);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0);
        glVertex3f(gun5[0], gun5[1], gun5[2]);
        glTexCoord2f(1.0, 0.0);
        glVertex3f(gun5[3], gun5[4], gun5[5]);
        glTexCoord2f(1.0, 1.0);
        glVertex3f(gun5[6], gun5[7], gun5[8]);
        glTexCoord2f(0.0, 1.0);
        glVertex3f(gun5[9], gun5[10], gun5[11]);
    glEnd();
glDisable(GL_BLEND);

我用的是用Freeimage加载的png图片,但是透明像素都是黑色的,哪里出错了?

【问题讨论】:

  • 你必须调用 glEnable(GL_ALPHA);初始化期间的某个地方。
  • 您的代码看起来非常好。错误必须在其他地方。

标签: opengl textures alpha


【解决方案1】:

我想你忘了在纹理环境中指定混合。在你的 glTexParameteri 调用之后插入这个:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

【讨论】:

  • 不,它有一个奇怪的行为,它会反转所有纹理的颜色
  • @PhantomFav :查看在线文档,看起来应该是 GL_DECAL 而不是 GL_BLEND。更改了我的答案以反映。
  • 感谢您的帮助,但现在透明像素是白色而不是黑色。
【解决方案2】:

纹理已正确加载,但未显示。使用glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 而不是glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 如果这还不够,请尝试glDepthMask(GL_FALSE); 看看您是否至少有 alpha 值。如果这还不够,请尝试

glEnable( GL_ALPHA_TEST );
glAlphaFunc( GL_NOTEQUAL, 0.0 );

在你的初始化函数中

【讨论】:

    【解决方案3】:

    透明像素是白色的,因为您指定的颜色是白色。根据GL_DECAL 参考RGBA 格式,此处应用的公式是Cp * (1- As) + Cs*As,现在当您的纹理完全透明时,您的As 将变为0,这导致最终颜色值等于Cp这是你的四边形(白色)的颜色。

    我认为在这种情况下,您应该使用 glColor4f(1.0f, 1.0f, 1.0f, 0.0f) 将四边形的 alpha 设置为零

    【讨论】:

    • 现在纹理全黑了,即使是不透明的像素。
    • @Luca 显然距离您发表评论已经过去了很长时间,但也许这会对下一个人有所帮助。我必须得到 GL_MODULATE 而不是 GL_DECAL 才能让它工作。使用 GL_DECAL,它是您所描述的黑色或白色,具体取决于当前颜色。我也不必启用 GL_ALPHA。
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多