2013-04-07 83 views
2

我使用的是頂點,幾何和片段着色器渲染帶有陰影的場景:片段着色器輸入紋理接入干擾

頂點着色器:

​​

幾何着色器:

#version 400 
layout(triangles_adjacency) in; 
layout(triangle_strip, max_vertices = 3) out; 
in vec4 vShadowCoord[]; 
out vec4 gShadowCoord; 
uniform vec3 lightPosition; 

void main() 
{ 
    gShadowCoord = vShadowCoord[0]; 
    gl_Position = gl_in[0].gl_Position; 
    EmitVertex(); 

    gShadowCoord = vShadowCoord[2]; 
    gl_Position = gl_in[2].gl_Position; 
    EmitVertex(); 

    gShadowCoord = vShadowCoord[4]; 
    gl_Position = gl_in[4].gl_Position; 
    EmitVertex(); 

    EndPrimitive(); 
} 

片段着色器:

#version 400 
in vec4 shadowCoord; 
out vec4 fColor; 
uniform sampler2DShadow shadowMap; 

void main(void) 
{ 
    float shadow = textureProj(shadowMap, shadowCoord); 
    fColor = (shadow > 0.0) ? vec4(1.0, 1.0, 1.0, 1.0) : vec4(0.1, 0.1, 0.1, 1.0); 
} 

這成功地呈現了我的場景與陰影。我場景中的立方體被點燃,並在我期望它們的陰影中。當我嘗試從幾何着色器中傳入兩種顏色中的一種時,就會出現問題。當我這樣做時,我的條件語句總是評估爲false。

幾何着色器:

#version 400 
layout(triangles_adjacency) in; 
layout(triangle_strip, max_vertices = 3) out; 
in vec4 vShadowCoord[]; 
out vec4 gShadowCoord; // Added 
out vec4 gColorLit; // Added 
uniform vec3 lightPosition; 

void main() 
{ 
    gShadowCoord = vShadowCoord[0]; 
    gColorLit = vec4(1.0, 1.0, 1.0, 1.0); // Added 
    gl_Position = gl_in[0].gl_Position; 
    EmitVertex(); 

    gShadowCoord = vShadowCoord[2]; 
    gColorLit = vec4(1.0, 1.0, 1.0, 1.0); // Added 
    gl_Position = gl_in[2].gl_Position; 
    EmitVertex(); 

    gShadowCoord = vShadowCoord[4]; 
    gColorLit = vec4(1.0, 1.0, 1.0, 1.0); // Added 
    gl_Position = gl_in[4].gl_Position; 
    EmitVertex(); 

    EndPrimitive(); 
} 

片段着色器:

#version 400 
in vec4 shadowCoord; 
in vec4 gColorLit; // Added 
out vec4 fColor; 
uniform sampler2DShadow shadowMap; 

void main(void) 
{ 
    float shadow = textureProj(shadowMap, shadowCoord); 
    // Changed 
    fColor = (shadow > 0.0) ? gColorLit : vec4(0.1, 0.1, 0.1, 1.0); 
} 

什麼可能會造成這種情況發生?

這發生在兩個Ubuntu的12.04和Windows 7

一些在我的着色器的代碼似乎沒有必要的,但那是因爲我已經剝離儘可能多的,因爲我可以離開而故障排除。

回答

1

沒有理由讓您的第二個着色器成功鏈接。您的幾何着色器說,它的寫作:

out vec4 gShadowCoord; // Added 

但是你的片段着色期待:

in vec4 shadowCoord; 

你應該得到一個鏈接錯誤。

+0

非常感謝! – bwroga 2013-04-08 02:43:20