我实现了一个相当简单的阴影贴图。我有一个简单的 obj 导入平面作为地面和一堆树。
我在飞机上有一个奇怪的阴影,我认为这是飞机的自身阴影。我不确定要发布什么代码。如果有帮助,请告诉我,然后我会这样做。
第一张图像,场景的相机视图。奇怪的纹理低多边形球体仅供参考光的位置。
第二张图像,存储在帧缓冲区中的深度纹理。我用它从光的角度计算了阴影坐标。由于我不能发布超过 2 个链接,我会留下这个。
第三张图像,深度纹理,具有更好的平面视图,从整个场景上方的不同灯光位置投射阴影。
LE:第二张图片http://i41.tinypic.com/23h3wqf.jpg(第一张图片的深度纹理)尝试了一些修复,在第一遍绘制地面之前添加 glCullFace(GL_BACK) 将其从深度纹理中移除但仍然出现在最终渲染中(如第一张图片中,地面的后部) - 我也尝试在第二遍中添加 CullFace,仍然显示地面上的阴影,尝试了正面和背面的所有组合。可能是因为正投影中的值吗?
阴影片段着色器:
#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 ;
}