diff options
Diffstat (limited to 'engine/src/rendering/shader/default.rs')
| -rw-r--r-- | engine/src/rendering/shader/default.rs | 62 |
1 files changed, 12 insertions, 50 deletions
diff --git a/engine/src/rendering/shader/default.rs b/engine/src/rendering/shader/default.rs index 737916f..4c59a1b 100644 --- a/engine/src/rendering/shader/default.rs +++ b/engine/src/rendering/shader/default.rs @@ -3,7 +3,6 @@ use std::sync::LazyLock; use crate::asset::{Assets, Label as AssetLabel}; use crate::camera::{Active as ActiveCamera, Camera}; -use crate::data_types::dimens::Dimens; use crate::draw_flags::NoDraw; use crate::ecs::actions::Actions; use crate::ecs::pair::ChildOf; @@ -16,9 +15,8 @@ use crate::lighting::{ PointLight, }; use crate::material::{Flags as MaterialFlags, Material}; -use crate::matrix::Matrix; use crate::model::{MaterialSearchResult, Model}; -use crate::projection::{ClipVolume as ProjectionClipVolume, Projection}; +use crate::projection::ClipVolume as ProjectionClipVolume; use crate::rendering::shader::cursor::{ BindingTextureKind as ShaderBindingTextureKind, BindingValue as ShaderBindingValue, @@ -38,8 +36,6 @@ use crate::rendering::{ use crate::scene::{Active as ActiveScene, Scene}; use crate::texture::WHITE_1X1_ASSET_LABEL as TEXTURE_WHITE_1X1_ASSET_LABEL; use crate::transform::{Scale, Transform, WorldPosition}; -use crate::vector::Vec3; -use crate::windowing::dpi::PhysicalSize; use crate::windowing::window::Window; pub static ASSET_LABEL: LazyLock<AssetLabel> = LazyLock::new(|| AssetLabel { @@ -147,10 +143,11 @@ pub fn enqueue_set_shader_bindings( .unwrap(), ); - let model_matrix = create_model_matrix(Transform { + let model_matrix = Transform { position: world_pos.as_deref().cloned().unwrap_or_default().position, scale: scale.as_deref().cloned().unwrap_or_default().scale, - }); + } + .to_matrix(); let inverted_model_matrix = model_matrix.inverse(); @@ -193,7 +190,7 @@ pub fn enqueue_set_shader_bindings( let lighting_shader_cursor = shader_cursor.field("Uniforms").field("lighting"); let material_shader_cursor = lighting_shader_cursor.field("material"); - let view = create_view_matrix(&camera, camera_world_pos.position); + let view = camera.to_view_matrix(camera_world_pos.position); shader_bindings.bindings.extend([ model_3d_shader_cursor @@ -244,7 +241,13 @@ pub fn enqueue_set_shader_bindings( shader_bindings.surface_specific_bindings.push(( window_surface_spec.id, model_3d_shader_cursor.field("projection").binding( - create_projection_matrix(&camera, &window.inner_size).into(), + camera + .projection + .to_matrix_rh( + window.inner_size, + ProjectionClipVolume::NegOneToOne, + ) + .into(), )?, )); } @@ -384,47 +387,6 @@ pub fn enqueue_set_shader_bindings( Ok(()) } -fn create_model_matrix(transform: Transform) -> Matrix<f32, 4, 4> -{ - let mut matrix = Matrix::new_identity(); - - matrix.translate(&transform.position); - matrix.scale(&transform.scale); - - matrix -} - -fn create_view_matrix(camera: &Camera, camera_world_pos: Vec3<f32>) -> Matrix<f32, 4, 4> -{ - let mut view = Matrix::new(); - - // tracing::debug!("Camera target: {:?}", camera.target); - - view.look_at(camera_world_pos, camera.target, camera.global_up); - - view -} - -fn create_projection_matrix( - camera: &Camera, - window_size: &PhysicalSize<u32>, -) -> Matrix<f32, 4, 4> -{ - match &camera.projection { - Projection::Perspective(perspective_proj) => perspective_proj.to_matrix_rh( - window_size.width as f32 / window_size.height as f32, - ProjectionClipVolume::NegOneToOne, - ), - Projection::Orthographic(orthographic_proj) => orthographic_proj.to_matrix_rh( - Dimens { - width: window_size.width as f32, - height: window_size.height as f32, - }, - ProjectionClipVolume::NegOneToOne, - ), - } -} - type RenderableEntity<'a> = ( &'a Model, Traverse< |
