【问题标题】:OpenGL ignores pixels with alphaOpenGL 忽略带有 alpha 的像素
【发布时间】:2012-12-06 00:40:25
【问题描述】:

嗯,我正在修改一个 2D 开源游戏客户端,我试图为游戏对象纹理添加透明度。它已经读取并加载了 alpha 通道。纹理已经加载到 openGL 中,格式和内部格式为 RGBA。

问题是,当像素的 alpha 通道低于 255(或 1)时,它就不会显示在屏幕上。它没有忽略 alpha 通道并且只显示 RGB,它隐藏了像素。 该客户端使用 OpenGL 和着色器进行绘图。

我已经通过调用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )glDisable(GL_DEPTH_TEST)glColorMask(1,1,1,1) 启用了混合。

【问题讨论】:

  • 您是否启用了 alpha 测试而不是 alpha 混合?
  • 感谢您的评论。我已经在整个源代码中进行了搜索,但没有找到任何支持 alpha 测试的内容。
  • 着色器怎么样 - 他们会杀死/丢弃吗?
  • 没有。着色器的代码是:
  • 统一浮动u_Time;统一的sampler2D u_Tex0;变化 vec2 v_TexCoord; void main() { gl_FragColor = texture2D(u_Tex0, v_TexCoord); }

标签: opengl opengl-es


【解决方案1】:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )

这一行告诉 OpenGL 如何混合源像素和目标像素。

glDisable(GL_DEPTH_TEST)

我认为这可能是您出错的地方,因为这会禁用您在 2D 渲染中不需要的 Z-DEPTH 测试。

glColorMask(1,1,1,1)

我对此不是 100%,但我怀疑这会隐藏任何与指定 RGBA 匹配的像素。 在这种情况下,任何 R=255、G=255、B=255 和 A=255 的像素都不会被渲染。

尝试使用:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

renderEverything();

glDisable(GL_BLEND);

希望你能得到它的工作:)

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2013-06-17
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2011-06-06
    相关资源
    最近更新 更多