2015-10-21 40 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