我有一个简单的Opengl-Application,如下所示:
正如你所看到的,我有一个带有纹理的飞机和suzanne,还有一些光。但是还有一个立方体。你只能看到上半部分,但问题是立方体保持黑色,无论如何。我尝试应用纹理 - >黑色。我试图给立方体一个颜色---->仍然是黑色。
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");
或
cube.draw();
由于我使用的这个方法适用于其他两个模型,我真的不知道它的问题是什么。纹理协调可能是错误的吗?
答案 0 :(得分:1)
基于给定的信息,我的猜测是亮度为0,因为ndot为0或负数。我会说检查你的法线和你的光线传感器。即使您的纹理坐标错误,将立方体设置为颜色也应该有效。