OpenGL阴影贴图问题

时间:2013-12-13 16:41:19

标签: c++ opengl glsl shadow-mapping

我实现了一个相当简单的阴影贴图。我有一个简单的obj导入的飞机作为地面和一堆树。

我在飞机上有一个奇怪的阴影,我认为这是飞机的自我阴影。我不确定发布什么代码。如果有帮助请告诉我,我会这样做。

第一张图片,相机视图的场景。奇怪的纹理低聚球仅供参考光位置。

camera view of the scene

第二个图像,存储在帧缓冲区中的深度纹理。我从光的角度计算了阴影坐标。由于我不能发布超过2个链接,我会留下这个链接。

第三张图像,深度纹理,可以更好地观察从整个场景上方不同光线位置投射阴影的平面。

depth buffer from another perspective

LE:第二张图片http://i41.tinypic.com/23h3wqf.jpg(第一张图片的深度纹理) 尝试了一些修复,在第一遍中绘制地面之前添加glCullFace(GL_BACK)将其从深度纹理中移除但仍然出现在最终渲染中(如在第一张图片中,地面的后部) - 我尝试添加CullFace第二遍,仍然显示在地面上的阴影,尝试了正面和背面的所有组合。是不是因为ortographic投影中的值?

阴影片段着色器:

#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 个答案:

没有答案