GLSL设置预定义变量的值

时间:2014-12-03 04:11:17

标签: java opengl glsl shader vertex-shader

我正在查看phong照明着色器的代码示例。它在顶点着色器中使用了gl_Normal,gl_Vertex和gl_ModelViewProjectionMatrix的预定义变量。我当前的顶点着色器看起来像这样。

#version 150 core

in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

out vec4 pass_Color;
out vec2 pass_TextureCoord;

void main(void) {
    gl_Position = projection * view * model * in_Position;

    pass_Color = in_Color;
    pass_TextureCoord = in_TextureCoord;
}

我想知道是否可以设置预定义变量的值。例如,我将gl_ModelViewProjectionMatrix的值设置为我的投影均匀值。我问这个是因为每当我尝试使用预定义的变量时,着色器都无法工作。

1 个答案:

答案 0 :(得分:2)

gl_ProjectionMatrix等预定义变量仅在兼容性配置文件中可用。由于您为着色器指定了核心配置文件,因此您将无法使用它们:

#version 150 core

如果您使用的是兼容性配置文件(并且我绝不建议这是一个好主意),您可以使用它们。然后,您将gl_ProjectionMatrix的值设置为:

glMatrixMode(GL_PROJECTION);
glLoadMatrix(...);

这些当然也是兼容性配置文件调用,并且在核心配置文件中不可用。但是,通过projection调用设置glUniformMatrix4fv()制服的价值并不简单。所以没有充分的理由回到过去。

我在回答核心配置文件的过程中写了一个更详细的描述内容GLSL变量:GLSL - Using custom output attribute instead of gl_Position