height(h),
lighting(l),
shadow_caster(c),
- sampler(Resources::get_global().get<Sampler>("_linear_clamp_shadow.samp")),
- radius(1),
- depth_bias(4),
- darkness(1.0f),
- rendered(false)
+ sampler(Resources::get_global().get<Sampler>("_linear_clamp_shadow.samp"))
{
depth_buf.storage(DEPTH_COMPONENT32F, width, height, 1);
fbo.set_format((DEPTH_ATTACHMENT,DEPTH_COMPONENT32F));
l.shadow_camera.set_orthographic(radius*2, radius*2);
l.shadow_camera.set_depth_clip(-radius, radius);
- Matrix shadow_matrix = l.shadow_camera.get_object_matrix();
- shadow_matrix.scale(radius*2, radius*2, -radius*2);
- shadow_matrix.translate(-0.5, -0.5, depth_bias/l.region.width-0.5);
- shadow_matrix.invert();
+ Matrix to_texcoord = Matrix().translate(Vector3(0.5f, 0.5f, 0.5f-depth_bias/l.region.width)).scale(0.5f);
+ Matrix shadow_matrix = to_texcoord*l.shadow_camera.get_projection_matrix()*l.shadow_camera.get_view_matrix();
shdata.uniform(format("shadows[%d].shd_world_matrix", l.index), shadow_matrix);
}
fbo.set_debug_name(name+" [FBO]");
for(unsigned i=0; i<lights.size(); ++i)
lights[i].shadow_camera.set_debug_name(format("%s/light%d.camera", name, i));
- depth_buf.set_debug_name(name+"/depth.tex2d");
+ depth_buf.set_debug_name(name+"/depth.tex");
shdata.set_debug_name(name+" [UBO]");
#else
(void)name;