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);
}

我在这里没有看到任何附件或图像。刚刚发布了链接。发布生成阴影贴图的着色器和读取阴影贴图的着色器的代码,否则,我们将在黑暗中绊倒。发布着色器代码