我想在程序中使我的小四角的角落变暗。我有以下顶点着色器:
#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
可用于“着色”顶点,但无论我将值更改为什么,它总是保持不变。
我的问题是,我可以使用什么功能来设置顶点的颜色?我希望顶点比四边形的其他部分稍暗,所以它看起来有点“更好”。
答案 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
, - 如果您更改了这些颜色,它也会在着色器中更改。