Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl GLSL向量乘法返回错误?不渲染模型_Opengl_Glsl_Multiplication - Fatal编程技术网

Opengl GLSL向量乘法返回错误?不渲染模型

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

我一直在努力学习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 = 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;