OpenGL:添加镜面照明时网格变黑
OpenGL : Mesh turns black when adding specular lighting
我已经在我的 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);
我已经在我的 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);