diff --git a/include/rasteriser/rasteriser.h b/include/rasteriser/rasteriser.h
index e19036d..eccde20 100644
--- a/include/rasteriser/rasteriser.h
+++ b/include/rasteriser/rasteriser.h
@@ -59,8 +59,8 @@ typedef struct {
 } rasteriser_scene_t;
 
 void render_scene(window_t *wnd, Arena *arena, const rasteriser_scene_t *scene);
-void render_instance(window_t *wnd, Arena *arena, mat3x4f_t proj_cam_mat,
-                     const instance_t *instance);
+void render_instance(window_t *wnd, Arena *arena, mat4x4f_t camera_matrix,
+                     mat3x4f_t projection_matrix, const instance_t *instance);
 void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
 void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
 void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
diff --git a/src/rasteriser/rasteriser.c b/src/rasteriser/rasteriser.c
index 4dea514..809a977 100644
--- a/src/rasteriser/rasteriser.c
+++ b/src/rasteriser/rasteriser.c
@@ -22,16 +22,15 @@ void render_scene(window_t *wnd, Arena *arena,
       inverse_camera_translation_matrix(scene->camera);
   mat4x4f_t cam_matrix =
       mul_mat4x4f(cam_inverse_rotation, cam_inverse_translation);
-  mat3x4f_t proj_cam_matrix =
-      mul_mat3x4f_by_mat4x4f(*(scene->proj_matrix), cam_matrix);
 
   for (u64 i = 0; i < scene->instance_count; ++i) {
-    render_instance(wnd, arena, proj_cam_matrix, &(scene->instances[i]));
+    render_instance(wnd, arena, cam_matrix, *(scene->proj_matrix),
+                    &(scene->instances[i]));
   }
 }
 
-void render_instance(window_t *wnd, Arena *arena, mat3x4f_t proj_cam_mat,
-                     const instance_t *instance) {
+void render_instance(window_t *wnd, Arena *arena, mat4x4f_t camera_matrix,
+                     mat3x4f_t projection_matrix, const instance_t *instance) {
   list_vec2i_t *projected = list_create_with_capacity(
       vec2i_t, arena, instance->model->vertices->count * sizeof(vec3f_t));
   if (!projected) {
@@ -46,7 +45,9 @@ void render_instance(window_t *wnd, Arena *arena, mat3x4f_t proj_cam_mat,
   mat4x4f_t tr_mat = mul_mat4x4f(t_mat, r_mat);
   mat4x4f_t trs_mat = mul_mat4x4f(tr_mat, s_mat);
 
-  mat3x4f_t xf_proj_mat = mul_mat3x4f_by_mat4x4f(proj_cam_mat, trs_mat);
+  mat4x4f_t xf_cam_mat = mul_mat4x4f(camera_matrix, trs_mat);
+
+  mat3x4f_t xf_proj_mat = mul_mat3x4f_by_mat4x4f(projection_matrix, xf_cam_mat);
 
   vec3f_t vertex = {0};
   vec2i_t point = {0};