OpenGL shadow map issue

640 views Asked by At

I implemented a fairly simple shadow map. I have a simple obj imported plane as ground and a bunch of trees.

I have a weird shadow on the plane which I think is the plane's self shadow. I am not sure what code to post. If it would help please tell me and I'll do so then.

First image, camera view of the scene. The weird textured lowpoly sphere is just for reference of the light position.

camera view of the scene

Second image, the depth texture stored in the framebuffer. I calculated shadow coords from light perspective with it. Since I can't post more than 2 links, I'll leave this one.

Third image, depth texture with a better view of the plane projecting the shadow from a different light position above the whole scene.

depth buffer from another perspective

LE: the second picture http://i41.tinypic.com/23h3wqf.jpg (Depth Texture of first picture) Tried some fixes, adding glCullFace(GL_BACK) before drawing the ground in the first pass removes it from the depth texture but still appears in the final render(like in the first picture, the back part of the ground) - i tried adding CullFace in the second pass also, still showing the shadow on the ground , tried all combinations of Front and Back facing. Can it be because of the values in the ortographic projection ?

Shadow fragment shader:

#version 330 core

layout(location = 0) out vec3 color;

in vec2 texcoord;
in vec4 ShadowCoord;

uniform sampler2D textura1;
uniform sampler2D textura2;
uniform sampler2D textura_depth;

uniform int has_alpha;

void main(){

vec3 tex1 = texture(textura1, texcoord).xyz;
vec3 tex2 = texture(textura2, texcoord).xyz;

if(has_alpha>0.5) if((tex2.r<0.1) && (tex2.g<0.1) && (tex2.b<0.1)) discard;

//Z value of depth texture from pass 1
float hartaDepth=texture( textura_depth,(ShadowCoord.xy/ShadowCoord.w)).z;

float shadowValue=1.0;

if(hartaDepth < ShadowCoord.z-0.005)
    shadowValue=0.5;

color = shadowValue * tex1 ;
}
0

There are 0 answers