2014-12-03 82 views
0

我正在查看phong lighting shader的代碼示例。它在頂點着色器中使用gl_Normal,gl_Vertex和gl_ModelViewProjectionMatrix的預定義變量。我目前的頂點着色器看起來像這樣。預定義變量的GLSL設置值

#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的值設置爲我的投影統一。我這樣問,因爲每當我嘗試使用預定義的變量時,着色器都不起作用。

回答

2

gl_ProjectionMatrix這樣的預定義變量僅在兼容性配置文件中可用。既然你指定你的着色器核心配置文件,您將無法使用它們:

#version 150 core 

如果您正在使用的相容性分佈(我並非暗示,這將是一個好主意) ,你可以使用它們。然後,您可以設置gl_ProjectionMatrix與價值:

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

這些當然也相容性分佈的呼叫,並在核心配置文件不可用。但它並不比通過glUniformMatrix4fv()呼叫設置projection制服的價值更簡單。所以沒有理由回到過去。

我在這裏寫了一個更詳細的描述,說明在轉換到核心配置文件中的內置GLSL變量時發生了什麼:GLSL - Using custom output attribute instead of gl_Position

+0

所以我猜我必須計算我自己的法線和頂點法線和光線位置 – irishpatrick 2014-12-03 12:28:44

+0

感謝您的幫助 – irishpatrick 2014-12-03 12:29:04