Glsl 阴影未正确渲染
我正在尝试使用阴影贴图创建阴影。我相信阴影贴图渲染得很好 似乎球体的阴影不在正确的位置,那么我该如何着手修复它呢?为什么球体周围有一个黑环,如何消除它 在阴影贴图顶点着色器中Glsl 阴影未正确渲染,glsl,opengl-3,opengl-4,shadow-mapping,Glsl,Opengl 3,Opengl 4,Shadow Mapping,我正在尝试使用阴影贴图创建阴影。我相信阴影贴图渲染得很好 似乎球体的阴影不在正确的位置,那么我该如何着手修复它呢?为什么球体周围有一个黑环,如何消除它 在阴影贴图顶点着色器中 gl_Position = u_depthMatrix * worldCoord; 在阴影贴图片段着色器中 fragmentdepth = gl_FragCoord.z; vs.glsl uniform mat4 u_Model; uniform mat4 u_View; uniform mat4 u_Persp;
gl_Position = u_depthMatrix * worldCoord;
在阴影贴图片段着色器中
fragmentdepth = gl_FragCoord.z;
vs.glsl
uniform mat4 u_Model;
uniform mat4 u_View;
uniform mat4 u_Persp;
uniform mat4 u_InvTrans;
uniform vec3 u_LightColor;
uniform vec3 u_LightDirection;
uniform vec3 u_EyePos;
uniform mat4 u_depthBiasMatrix;
in vec3 Position;
in vec3 Normal;
in vec2 Texcoord;
out vec3 v_Normal;
out vec2 v_Texcoord;
out vec3 v_Position;
out vec3 v_PositionMC;
out vec4 shadowCoord;
void main(void)
{
v_Normal = (u_InvTrans*vec4(Normal,0.0)).xyz;
vec4 world = u_Model * vec4(Position, 1.0);
vec4 cameraCoord = u_View * world;
v_Position = cameraCoord.xyz;
shadowCoord = u_depthBiasMatrix * world;
gl_Position = u_Persp * cameraCoord;
}
fs.glsl
uniform sampler2D shadowMap;
uniform vec3 u_LightColor;
uniform vec3 u_LightDirection;
uniform vec3 u_EyePos;
uniform vec3 u_Ka;
uniform vec3 u_Kd;
uniform vec3 u_Ks;
in vec3 v_Normal;
in vec2 v_Texcoord;
in vec3 v_Position; //coordinate of vertex in camera coordinate system
in vec4 shadowCoord;
void main(void)
{
vec3 v_Normal1 = normalize(v_Normal);
//Diffuse Lighting
vec3 diff = normalize(u_LightDirection - v_Position);
float diffuse = max(dot(diff , v_Normal1) , 0);
vec3 diffuseColor = diffuse * u_Kd * u_LightColor;
//Specular Lighting
vec3 v = normalize(vec3(u_EyePos - v_Position));
vec3 h = normalize(diff + v);
float sl = pow(max(dot(h, v_Normal1) , 0.0), 50);
if ( diffuse <= 0 ) sl = 0;
vec3 specularColor = sl * u_Ks * u_LightColor;
vec3 v_Color;
v_Color = u_Ka + diffuseColor + specularColor ;
//Shadow Part
vec3 shadowCoord3;
float shadowFactor = 1.0;
if(shadowCoord.w > 0 )
{
shadowCoord3 = shadowCoord.xyz / shadowCoord.w ;
if ( texture2D( shadowMap, shadowCoord3.xy ).z < shadowCoord3.z)
{
shadowFactor = 0.2;
}
}
gl_FragColor = shadowFactor * vec4(v_Color , 1);
}
统一采样器二维阴影图;
均匀的vec3 u_亮色;
均匀vec3u_光方向;
均匀vec3 u_EyePos;
均匀vec3-u_-Ka;
均匀vec3u_-Kd;
统一的vec3 u_Ks;
vec3v_正常;
在vec2 v_Texcoord;
在vec3 v_位置//摄像机坐标系中的顶点坐标
在vec4阴影坐标中;
真空总管(真空)
{
vec3 v_Normal1=规格化(v_Normal);
//漫射照明
vec3 diff=规格化(u_光方向-v_位置);
浮动漫反射=最大值(点(微分,v_法线1),0);
vec3 diffuseColor=漫反射*u_Kd*u_LightColor;
//镜面照明
vec3 v=标准化(vec3(u_-EyePos-v_位置));
vec3 h=标准化(差异+v);
浮点sl=功率(最大值(点(h,v_法线1),0.0),50);
如果(漫反射0)
{
shadowCoord3=shadowCoord.xyz/shadowCoord.w;
if(纹理2d(阴影贴图,阴影坐标3.xy).z<阴影坐标3.z)
{
阴影因子=0.2;
}
}
gl_FragColor=阴影因子*vec4(v_颜色,1);
}
我在这里没有看到任何附件或图像。刚刚发布了链接。发布生成阴影贴图的着色器和读取阴影贴图的着色器的代码,否则,我们将在黑暗中绊倒。发布着色器代码