GLSL - 设置顶点的颜色

时间:2014-04-11 01:49:31

标签: opengl glsl

我想在程序中使我的小四角的角落变暗。我有以下顶点着色器:

#version 130

varying vec4 v_color;
varying vec2 v_texcoord;

void main()
{
    v_color = gl_Color.rgba;
    v_texcoord = gl_MultiTexCoord0.xy;
    gl_FrontColor = vec4(v_color.r, v_color.g, v_color.b, 1.0f);
    gl_Position = ftransform(); 
}

我的片段着色器:

#version 130

uniform sampler2D u_texture;

varying vec4 v_color;
varying vec2 v_texcoord;

void main()
{
    gl_FragColor = v_color * texture2D(u_texture, v_texcoord);
}

我在某处读到gl_FrontColor可用于“着色”顶点,但无论我将值更改为什么,它总是保持不变。

我的问题是,我可以使用什么功能来设置顶点的颜色?我希望顶点比四边形的其他部分稍暗,所以它看起来有点“更好”。

1 个答案:

答案 0 :(得分:2)

您输出v_color(您的变化)和gl_FrontColor(GLSL内置)。但是,在片段着色器中,您只使用v_color,因此gl_FrontColor中的任何内容都会被忽略。

您应该只使用其中一种。任

// vertex
#version 130

#define SCALE_FACTOR 0.5

varying vec4 v_color;
varying vec2 v_texcoord;

void main()
{
    v_color = vec4(gl_Color.rgb * SCALE_FACTOR, 1.0);
    v_texcoord = gl_MultiTexCoord0.xy;
    gl_Position = ftransform(); 
}

// fragment
#version 130

uniform sampler2D u_texture;

varying vec4 v_color;
varying vec2 v_texcoord;

void main()
{
    gl_FragColor = v_color * texture2D(u_texture, v_texcoord);
}

或者在顶点使用gl_FrontColor,在片段着色器中使用gl_Color,而不是v_color(并删除不再需要的内容)。

当然,顶点gl_Color属性来自glColorPointer, - 如果您更改了这些颜色,它也会在着色器中更改。