如何在这个GLSL示例中设置GL_RGBA?

时间:2011-12-03 16:09:59

标签: opengl glsl shader

我在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);
}

感谢

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

顺便说一下,如果GL_RGB给出了很好的效果,你可能需要先检查纹理。 如果纹理的图像在内部是RGBA数组,那么从第二个像素开始,你会得到噪声,因为第二个像素的alpha分量应该被解释为红色,依此类推。