OpenGL:添加镜面反射照明时,网格将变黑



我在C++openGL程序中实现了镜面反射照明,但当我将最终镜面反射值添加到现有的漫反射照明方程中时,它会变黑
仅在网格上显示镜面反射也不起作用,并且网格保持不变,并且从Pixel的最终方程式中移除镜面反射将恢复非镜面反射照明
如何修复此问题
这些是着色器

#version 330 core
layout (location = 0) in vec3 pos;
layout (location = 1) in vec2 coords;
layout (location = 2) in vec3 normals;
out vec2 Texture_Coords;
out vec3 normal;
out vec3 toLightVector;
out vec3 toCameraVector;
uniform mat4 p;
uniform mat4 m;
uniform mat4 v;
uniform vec3 light_position;
void main(){
vec4 world_position = m * vec4(pos,1.0);
//unrelated working stuff
toCameraVector = (inverse(v) * vec4(0,0,0,1)).xyz - world_position.xyz;
}
#version 330 core
out vec4 Pixel;
in vec2 Texture_Coords;
in vec3 normal;
in vec3 toLightVector;
in vec3 toCameraVector;
uniform vec4 color;
uniform sampler2D Texture;
uniform float ambient;
uniform vec3 light_color;
uniform float reflective;
uniform float specular;
void main(){
vec3 unitToCameraVector = normalize(toCameraVector);
//unrelated working stuff
vec3 light_direction = -unitToLightVector;
vec3 reflection = reflect(light_direction, unitNormal);
float specular_factor = dot(reflection, unitToCameraVector);
specular_factor = max(specular, 0.0);
float damped_specular = pow(specular_factor, specular);
vec3 final_specular = damped_specular * light_color;
Pixel = vec4(diffuse,1.0) * texture(Texture, Texture_Coords) + vec4(final_specular, 1.0);
}

可能有打字错误?声明

specular_factor = max(specular, 0.0);

看起来应该是:

specular_factor = max(specular_factor, 0.0);

最新更新