2015-10-21 71 views
1

我一直在努力學習opengl一個有趣的一面項目,並在學習時遇到了一些問題。GLSL矢量乘法返回錯誤?模型沒有渲染

下面是一個片段着色器:

#version 330 core 
in vec3 Normal; 
in vec3 Position; 
in vec2 TexCoords; 
out vec4 color; 

uniform vec3 cameraPos; 
uniform samplerCube skybox; 

struct Material{ 
    sampler2D diffuse0; 
    sampler2D specular0; 
    sampler2D emitter0; 
    sampler2D reflection0; 
    float shininess; 
}; 
uniform Material material; 


void main(){ 

    vec3 I = normalize(Position - cameraPos); 
    vec3 R = reflect(I, normalize(Normal)); 

    float intensity = 0; 
    intensity += texture(material.reflection0, TexCoords).x; 

    vec4 rfl = texture(skybox, R); 

    //this line doesnt produce anything 
    color = rfl * intensity; 

} 

當我用上面的代碼,我的模型是完全從視圖消失。

但是,如果我調試出來單獨如轉產

color = rfl * intensity; 

color = rfl; 

這實際上呈現並返回下面的圖片 with colors

並改變線路到

color = vec4(intensity); 

它呈現並返回下面的圖片 with colors

我試圖改變

color = rfl * some constant 
    //or 
    color = vec4(0.5) * intensity 

而且兩者呈現我的模型正常。當我試圖將rfl和強度放在一起時,我爲什麼不渲染它。我認爲這可能是因爲存在乘法失敗的價值,但我不知道它們可能是什麼。

+0

'color = rfl * vec4(intensity)'有效嗎? –

+0

編輯:我誤讀你的評論,並且rfl * vec4(強度)不起作用 – Xyten

+0

如何color = vec4(rfl *強度)和color = vec4(vec3(rfl *強度),1.0)? – stonexjr

回答

1

然後更改

color = rfl * intensity; 

color = rfl; 

GLSL編譯器會掉落

uniform Material material; 

由於優化。當你將行改爲:

color = intensity; 

確保你綁定的紋理制服是正確的。

+0

謝謝!我似乎忘了將紋理制服綁定到着色器。 – Xyten