]> git.tdb.fi Git - libs/gl.git/commitdiff
Use the shadow camera's projection matrix to form the shadow matrix
authorMikko Rasa <tdb@tdb.fi>
Thu, 7 Oct 2021 15:04:19 +0000 (18:04 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 7 Oct 2021 22:15:27 +0000 (01:15 +0300)
This makes it easier to support different types of projection, such as
perspective projection for point lights.

source/effects/shadowmap.cpp

index 1b5f531b913c2d339f8e1aee3830775d576aed58..a0627faabf14834fd959ad1abe043dbb79feef18 100644 (file)
@@ -153,10 +153,8 @@ void ShadowMap::setup_frame(Renderer &renderer)
                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);
        }