GLSL 向量乘法 returns 错误?模型未渲染
GLSL Vector multiplication returns error? Model is not rendered
我一直在尝试研究 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;
这实际上渲染了 returns 下面的图片
并将该行更改为
color = vec4(intensity);
渲染并returns如下图
我试过改变
color = rfl * some constant
//or
color = vec4(0.5) * intensity
而且都正常渲染了我的模型。当我尝试将 rfl 和强度相乘时,我很困惑为什么它不呈现。我认为这可能是因为有些值乘法失败,但我不知道它们可能是什么。
那你换
color = rfl * intensity;
到
color = rfl;
GLSL 编译器将删除
uniform Material material;
由于优化。当您将行更改为:
时,天空盒也会发生同样的情况
color = intensity;
确保您绑定的纹理制服是正确的。
我一直在尝试研究 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;
这实际上渲染了 returns 下面的图片
并将该行更改为
color = vec4(intensity);
渲染并returns如下图
我试过改变
color = rfl * some constant
//or
color = vec4(0.5) * intensity
而且都正常渲染了我的模型。当我尝试将 rfl 和强度相乘时,我很困惑为什么它不呈现。我认为这可能是因为有些值乘法失败,但我不知道它们可能是什么。
那你换
color = rfl * intensity;
到
color = rfl;
GLSL 编译器将删除
uniform Material material;
由于优化。当您将行更改为:
时,天空盒也会发生同样的情况color = intensity;
确保您绑定的纹理制服是正确的。