Opengl GLSL向量乘法返回错误?不渲染模型
我一直在努力学习opengl的一个有趣的项目,在学习过程中遇到了一些问题 下面是片段着色器:Opengl GLSL向量乘法返回错误?不渲染模型,opengl,glsl,multiplication,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 specula
#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 = vec4(intensity);
它渲染并返回以下图片
我试过换衣服
color = rfl * some constant
//or
color = vec4(0.5) * intensity
两者都正常渲染了我的模型。当我尝试将rfl和强度相乘时,我很难理解为什么它不能呈现。我认为这可能是因为有一些值导致乘法失败,但我不知道它们可能是什么 然后你就改变了
color = rfl * intensity;
到
GLSL编译器将删除
uniform Material material;
适当优化。当您将线路更改为以下位置时,skybox也会发生同样的情况:
color = intensity;
请确保您的纹理制服绑定正确。颜色=rfl*vec4(强度)有效吗?编辑:我误读了您的评论,而rfl*vec4(强度)无效。颜色=vec4(rfl*intensity)和颜色=vec4(vec3(rfl*intensity),1.0如何,似乎我错过了纹理均匀绑定到着色器。谢谢!我似乎忘记了将纹理统一绑定到着色器。
uniform Material material;
color = intensity;