aboutsummaryrefslogtreecommitdiff
path: root/stockton-render/src/draw/camera.rs
diff options
context:
space:
mode:
Diffstat (limited to 'stockton-render/src/draw/camera.rs')
-rw-r--r--stockton-render/src/draw/camera.rs76
1 files changed, 38 insertions, 38 deletions
diff --git a/stockton-render/src/draw/camera.rs b/stockton-render/src/draw/camera.rs
index 421b661..495e6a2 100644
--- a/stockton-render/src/draw/camera.rs
+++ b/stockton-render/src/draw/camera.rs
@@ -1,14 +1,15 @@
//! Things related to converting 3D world space to 2D screen space
use legion::maybe_changed;
+use na::{look_at_lh, perspective_lh_zo};
+use stockton_types::{
+ components::{CameraSettings, CameraVPMatrix, Transform},
+ Vector3,
+};
+
+
-use nalgebra_glm::look_at_lh;
-use nalgebra_glm::perspective_lh_zo;
-use stockton_levels::prelude::MinRenderFeatures;
-use crate::Renderer;
-use stockton_types::components::{CameraSettings, Transform};
-use stockton_types::Vector3;
fn euler_to_direction(euler: &Vector3) -> Vector3 {
let pitch = euler.x;
@@ -22,35 +23,34 @@ fn euler_to_direction(euler: &Vector3) -> Vector3 {
)
}
-// #[system(for_each)]
-// #[filter(maybe_changed::<Transform>() | maybe_changed::<CameraSettings>())]
-// pub fn calc_vp_matrix<M: 'static + MinRenderFeatures>(
-// transform: &Transform,
-// settings: &CameraSettings,
-// #[resource] renderer: &mut Renderer<M>,
-// ) {
-// let ratio = renderer.context.target_chain.properties.extent.width as f32
-// / renderer.context.target_chain.properties.extent.height as f32;
-// // Get look direction from euler angles
-// let direction = euler_to_direction(&transform.rotation);
-
-// // Converts world space to camera space
-// let view_matrix = look_at_lh(
-// &transform.position,
-// &(transform.position + direction),
-// &Vector3::new(0.0, 1.0, 0.0),
-// );
-
-// // Converts camera space to screen space
-// let projection_matrix = {
-// let mut temp = perspective_lh_zo(ratio, settings.fov, settings.near, settings.far);
-
-// // Vulkan's co-ord system is different from OpenGLs
-// temp[(1, 1)] *= -1.0;
-
-// temp
-// };
-
-// // Chain them together into a single matrix
-// renderer.context.vp_matrix = projection_matrix * view_matrix
-// }
+#[system(for_each)]
+#[filter(maybe_changed::<Transform>() | maybe_changed::<CameraSettings>())]
+pub fn calc_vp_matrix(
+ transform: &Transform,
+ settings: &CameraSettings,
+ matrix: &mut CameraVPMatrix,
+ #[state] ratio: &mut f32,
+) {
+ // Get look direction from euler angles
+ let direction = euler_to_direction(&transform.rotation);
+
+ // Converts world space to camera space
+ let view_matrix = look_at_lh(
+ &transform.position,
+ &(transform.position + direction),
+ &Vector3::new(0.0, 1.0, 0.0),
+ );
+
+ // Converts camera space to screen space
+ let projection_matrix = {
+ let mut temp = perspective_lh_zo(*ratio, settings.fov, settings.near, settings.far);
+
+ // Vulkan's co-ord system is different from OpenGLs
+ temp[(1, 1)] *= -1.0;
+
+ temp
+ };
+
+ // Chain them together into a single matrix
+ matrix.vp_matrix = projection_matrix * view_matrix;
+}