diff options
author | HampusM <hampus@hampusmat.com> | 2025-01-19 22:35:49 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2025-01-19 23:04:30 +0100 |
commit | e2c15f3f2fb6a67d615322020a78bf334621b16c (patch) | |
tree | 8a0d081574ac9376092b817332452284d18d551f /engine/src/renderer/opengl.rs | |
parent | 9b4b46438eca26faca9809646dc1631ddcafd64e (diff) |
feat(engine): add orthographic projection support
Diffstat (limited to 'engine/src/renderer/opengl.rs')
-rw-r--r-- | engine/src/renderer/opengl.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/engine/src/renderer/opengl.rs b/engine/src/renderer/opengl.rs index 7220ddc..f48dcc0 100644 --- a/engine/src/renderer/opengl.rs +++ b/engine/src/renderer/opengl.rs @@ -61,7 +61,7 @@ use crate::opengl::{ Capability, ContextFlags, }; -use crate::projection::{new_perspective_matrix, Projection}; +use crate::projection::{ClipVolume, Projection}; use crate::texture::{Id as TextureId, Texture}; use crate::transform::{Position, Scale}; use crate::util::NeverDrop; @@ -469,19 +469,20 @@ fn apply_transformation_matrices( gl_shader_program .set_uniform_matrix_4fv(c"model", &create_transformation_matrix(transformation)); - let view = create_view(camera, camera_pos); + let view_matrix = create_view_matrix(camera, &camera_pos.position); - gl_shader_program.set_uniform_matrix_4fv(c"view", &view); + gl_shader_program.set_uniform_matrix_4fv(c"view", &view_matrix); #[allow(clippy::cast_precision_loss)] - let projection = match &camera.projection { - Projection::Perspective(perspective) => new_perspective_matrix( - perspective, - window_size.width as f32 / window_size.height as f32, - ), + let proj_matrix = match &camera.projection { + Projection::Perspective(perspective_proj) => perspective_proj + .to_matrix(window_size.width as f32 / window_size.height as f32), + Projection::Orthographic(orthographic_proj) => { + orthographic_proj.to_matrix_rh(&camera_pos.position, ClipVolume::NegOneToOne) + } }; - gl_shader_program.set_uniform_matrix_4fv(c"projection", &projection); + gl_shader_program.set_uniform_matrix_4fv(c"projection", &proj_matrix); } fn apply_light<PointLightHolder>( @@ -694,11 +695,11 @@ fn create_light_uniform_name( } } -fn create_view(camera: &Camera, camera_pos: &Position) -> Matrix<f32, 4, 4> +fn create_view_matrix(camera: &Camera, camera_pos: &Vec3<f32>) -> Matrix<f32, 4, 4> { let mut view = Matrix::new(); - view.look_at(&camera_pos.position, &camera.target, &camera.global_up); + view.look_at(&camera_pos, &camera.target, &camera.global_up); view } |