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 漫反射光始终为黑色的立方体_Opengl_Lwjgl - Fatal编程技术网

Opengl 漫反射光始终为黑色的立方体

Opengl 漫反射光始终为黑色的立方体,opengl,lwjgl,Opengl,Lwjgl,我有一个简单的Opengl应用程序,如下所示: 正如你所看到的,我有一个平面和苏珊娜,还有一个纹理和一些光线。但也有一个立方体。你可以看到上半部分,但问题是立方体无论如何都保持黑色。我尝试应用纹理-->黑色。我试着给立方体一个颜色-->仍然是黑色 in vec3 surfaceNormal; in vec3 toLightVector; smooth in vec2 textureCords; out vec4 outputColor; uniform sampler2D s; uni

我有一个简单的Opengl应用程序,如下所示:

正如你所看到的,我有一个平面和苏珊娜,还有一个纹理和一些光线。但也有一个立方体。你可以看到上半部分,但问题是立方体无论如何都保持黑色。我尝试应用纹理-->黑色。我试着给立方体一个颜色-->仍然是黑色

in vec3 surfaceNormal;
in vec3 toLightVector;
smooth in vec2 textureCords;


out vec4 outputColor;


uniform sampler2D s;
uniform int hasTexture;
uniform vec3 LightColor;


void main()
{
   vec3 unitNormal = normalize(surfaceNormal);
   vec3 unitLightVector = normalize(toLightVector);
   float ndot = dot(unitNormal,unitLightVector);
   float brightness = max(ndot,0.0);
   vec3 diffuse = brightness*LightColor*1.5;
    if(hasTexture == 1){

        **outputColor =  vec4(diffuse,1.0) * texture(s,textureCords);**
    }else{

        **outputColor = vec4(diffuse,1.0) *vec4(0.4,0.5,0.7,1.0);**
    }
}
这是我的片段着色器。我向该着色器传递一个统一的hasTexture,以检查它是否应该使用纹理渲染。 例如:

cube.draw("texture.png");


由于我使用的这种方法适用于其他两个模型,我真的不知道它有什么问题。也许纹理坐标是错误的?

根据给定的信息,我猜亮度是0,因为ndot是0或负值。我会说检查你的法线和“toLightVector”。即使纹理坐标错误,将立方体设置为颜色也应该有效。

我建议验证问题确实存在于纹理中,换句话说,消除hasTexture可能不是1、漫反射可能是0等的可能性。如果纹理不包含黑色,也要检查纹理,即使坐标没有意义,采样器也不会返回黑色。还有,为什么会被否决?
cube.draw();