我正在尝试使用着色器在lwjgl中渲染纹理。一旦我在顶点着色器中使用gl_Color,我就没有输出。
这是有效的:
#version 120
attribute vec2 position;
attribute vec2 texCoord;
varying vec2 fragmentCoord;
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 0.0f, 1.0f);
//gl_FrontColor = gl_Color;
gl_FrontColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);
fragmentCoord = (gl_TextureMatrix[0] * vec4(texCoord, 0.0f, 1.0f)).xy;
}
这不起作用:
#version 120
attribute vec2 position;
attribute vec2 texCoord;
varying vec2 fragmentCoord;
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 0.0f, 1.0f);
gl_FrontColor = gl_Color;
gl_FrontColor = vec4(1.0f, 1.0f, 1.0f, 1.0f);
fragmentCoord = (gl_TextureMatrix[0] * vec4(texCoord, 0.0f, 1.0f)).xy;
}
两者的片段着色器是:
#version 120
uniform sampler2D texture;
varying vec2 fragmentCoord;
void main()
{
gl_FragColor = texture2D(texture, fragmentCoord) * gl_Color;
}
相同的代码适用于朋友,我想知道为什么它不适合我。
我做错了什么?
答案 0 :(得分:2)
片段着色器应具有:
gl_FragColor = texture2D(texture, fragmentCoord) * gl_FrontColor;
由于gl_FrontColor是顶点着色器的输出... gl_Color不是。