Я реализовал довольно простую карту теней. У меня есть простой obj импортированный самолет как земля и связка деревьев.
У меня странная тень на плоскости, которая, я думаю, является собственной тенью самолета. Я не уверен, какой код для публикации. Если это поможет, пожалуйста, скажите мне, и я сделаю это тогда.
Первое изображение, вид с камеры. Странная текстурированная низкополигональная сфера просто для справки о положении света.
Второе изображение, текстура глубины, хранящаяся в кадровом буфере. Я рассчитал теневые координаты с точки зрения света. Поскольку я не могу опубликовать более двух ссылок, я оставлю эту.
Третье изображение, текстура глубины с лучшим обзором плоскости, проецирующей тень из другого источника света над всей сценой.
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 ;
}
Задача ещё не решена.
Других решений пока нет …