我一直在努力学习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;
这实际上呈现并返回以下图片
将该行更改为
color = vec4(intensity);
它呈现并返回以下图片
我尝试过改变
color = rfl * some constant
//or
color = vec4(0.5) * intensity
两者都正常地渲染我的模型。当我尝试将rfl和强度放在一起时,我难以理解它为什么不渲染。我想这可能是因为有些值会使乘法失败,但我不知道它们可能是什么。
答案 0 :(得分:1)
然后你改变
color = rfl * intensity;
到
color = rfl;
GLSL编译器将丢弃
uniform Material material;
适当的优化。当您将行更改为:
时,天空框也会发生相同的情况color = intensity;
确保纹理制服的绑定是正确的。