【问题标题】:How to set the GL_RGBA in this GLSL example?如何在这个 GLSL 示例中设置 GL_RGBA?
【发布时间】:2011-12-03 16:09:58
【问题描述】:

我正在 GLSL 中创建以下着色器,其目的是根据 light_text 的 Alpha 通道混合 2 个纹理。不幸的是,alpha 通道总是设置为 1(虽然我确信我的原始纹理的值从 0 到 1 不等) 我在另一个 SO 问题中看到我需要将标志 GL_RGBA 放在某个地方,因为它默认位于 GL_RGB ,但是在我的示例中我应该把它放在哪里? 这是代码:

const vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
uniform sampler2D world_tex;
uniform sampler2D light_tex;
uniform float Alpha;
uniform vec3 NewColor;
void main()
{
    vec3 curColor = vec3(texture2D(world_tex, gl_TexCoord[0].xy ));
    vec3 lightColor = vec3(texture2D(light_tex, gl_TexCoord[0].xy ));

    float graylvl = dot(curColor , lumCoeff);

    vec3 appliedLight = lightColor + curColor;

    float coeff = texture2D(light_tex, gl_TexCoord[0].xy ).a;// <--- equals 1 always

    vec3 color_saturated     = mix(vec3(graylvl), curColor, Alpha);
    gl_FragColor   = vec4( mix(color_saturated + NewColor, appliedLight,  coeff) , 1.0);
}

谢谢

【问题讨论】:

    标签: opengl glsl shader


    【解决方案1】:

    无处可去。是glTexImage2D的参数,在客户端上传纹理时使用。

    【讨论】:

      【解决方案2】:

      这需要在您对glTexImage2D 的一次调用中设置在GLSL 代码之外。第三个参数采用内部格式,应该是GL_RGBA,以及第 7 个参数,它指定要放入纹理的数据的格式(第 7 个参数应该已经设置,否则您不会得到任何可用的结果)。

      【讨论】:

        【解决方案3】:

        顺便说一句,如果它使用 GL_RGB 提供了良好的效果,您可能需要先检查您的纹理。 如果您的纹理图像在内部是一个 RGBA 数组,那么从第二个像素开始,您会得到噪点,因为对于第二个像素,alpha 分量应该被解释为红色,依此类推。

        【讨论】:

          猜你喜欢
          • 2015-03-24
          • 1970-01-01
          • 2018-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-29
          • 2012-11-16
          • 1970-01-01
          相关资源
          最近更新 更多