summaryrefslogtreecommitdiff
path: root/engine/src/camera.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/camera.rs')
-rw-r--r--engine/src/camera.rs34
1 files changed, 33 insertions, 1 deletions
diff --git a/engine/src/camera.rs b/engine/src/camera.rs
index 7abb9af..362e0d6 100644
--- a/engine/src/camera.rs
+++ b/engine/src/camera.rs
@@ -2,12 +2,44 @@ use crate::vector::Vec3;
pub trait Camera
{
- /// Returns the current camera position.
+ /// Returns the camera position.
fn position(&self) -> Vec3<f32>;
/// Returns the position of the camera target.
fn target(&self) -> Vec3<f32>;
+ /// Returns the direction the camera is looking.
+ fn direction(&self) -> Vec3<f32>
+ {
+ self.target() - self.position()
+ }
+
+ /// Returns the right direction relative from where the camera is looking.
+ fn right(&self) -> Vec3<f32>
+ {
+ self.direction().cross(&self.global_up()).normalize()
+ }
+
+ /// Returns the left direction relative from where the camera is looking.
+ fn left(&self) -> Vec3<f32>
+ {
+ -self.right()
+ }
+
+ /// Returns the upwards direction relative from where the camera is looking.
+ fn up(&self) -> Vec3<f32>
+ {
+ let rev_direction = -self.direction();
+
+ rev_direction.cross(&self.right())
+ }
+
+ /// Returns the downwards direction relative from where the camera is looking.
+ fn down(&self) -> Vec3<f32>
+ {
+ -self.up()
+ }
+
/// Returns the global direction upwards.
///
/// The default implementation which returns [`Vec3::UP`] should be fine in most