GLSL向量乘法返回错误?模型未呈现

时间:2015-10-21 00:00:31

标签: opengl glsl multiplication

我一直在努力学习opengl以获得有趣的辅助项目,并在学习时遇到一些问题。

下面是片段着色器:

#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和强度放在一起时,我难以理解它为什么不渲染。我想这可能是因为有些值会使乘法失败,但我不知道它们可能是什么。

1 个答案:

答案 0 :(得分:1)

然后你改变

color = rfl * intensity;

color = rfl;

GLSL编译器将丢弃

uniform Material material;

适当的优化。当您将行更改为:

时,天空框也会发生相同的情况
color = intensity;

确保纹理制服的绑定是正确的。