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