【问题标题】:GLSL set value of predefined variables预定义变量的 GLSL 设置值
【发布时间】:2014-12-03 04:11:17
【问题描述】:

我正在查看 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 的值设置为我的投影制服。我问这个是因为每当我尝试使用预定义的变量时,着色器都不起作用。

【问题讨论】:

    标签: java opengl glsl shader vertex-shader


    【解决方案1】:

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

    #version 150 core
    

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

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

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

    我更详细地描述了内置 GLSL 变量在过渡到核心配置文件时发生的情况,并在此回答:GLSL - Using custom output attribute instead of gl_Position

    【讨论】:

    • 所以我猜我必须计算我自己的法线和顶点法线,以及光照位置
    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2015-01-01
    • 2020-02-05
    相关资源
    最近更新 更多