X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=support%2Fcamera.rs;h=9f0e3bac45ea2422d0335a545b0e8c21b158dd28;hb=9f1d6a36fc1fd480f27977f047d86a152109b786;hp=1b56d7d9d5b3f9e91d61e5e1558ca8bc690d69fb;hpb=95d84a2a2ba1ddd546671f60424345f1ba9948a3;p=mandelwow.git diff --git a/support/camera.rs b/support/camera.rs index 1b56d7d..9f0e3ba 100644 --- a/support/camera.rs +++ b/support/camera.rs @@ -1,44 +1,13 @@ extern crate glutin; +use support::vec3::Vec3; +use support::vec3::norm; + use std::f32; -use std::ops::Add; -use std::ops::AddAssign; -use std::ops::Sub; -use std::ops::Mul; //use glutin::Event; //use glutin::VirtualKeyCode; -#[derive(Default, PartialEq, Debug, Clone, Copy)] -pub struct Vec3 (f32, f32, f32); - -impl Add for Vec3 { - type Output = Vec3; - fn add(self, other: Vec3) -> Vec3 { - Vec3(self.0 + other.0, self.1 + other.1, self.2 + other.2) - } -} - -impl AddAssign for Vec3 { - fn add_assign(&mut self, other: Vec3) { - *self = Vec3(self.0 + other.0, self.1 + other.1, self.2 + other.2) - } -} - -impl Sub for Vec3 { - type Output = Vec3; - fn sub(self, other: Vec3) -> Vec3 { - Vec3(self.0 - other.0, self.1 - other.1, self.2 - other.2) - } -} - -impl Mul for Vec3 { - type Output = Vec3; - fn mul(self, f: f32) -> Vec3 { - Vec3(self.0 * f, self.1 * f, self.2 * f) - } -} - #[derive(Default)] pub struct CameraState { aspect_ratio: f32, @@ -57,17 +26,12 @@ pub struct CameraState { turning_right: bool, } -fn norm(v: &Vec3) -> Vec3 { - let len = (v.0 * v.0 + v.1 * v.1 + v.2 * v.2).sqrt(); - Vec3(v.0 / len, v.1 / len, v.2 / len) -} - impl CameraState { pub fn new() -> CameraState { CameraState { aspect_ratio: 1024.0 / 768.0, pos: Vec3(0.0, 0.0, 0.0), - dir: Vec3(0.0, 0.0, 1.0), + dir: Vec3(0.0, 0.0, -1.0), .. Default::default() } } @@ -76,6 +40,10 @@ impl CameraState { self.pos = pos; } + pub fn get_pos(&self) -> Vec3 { + self.pos + } + pub fn set_dir(&mut self, dir: Vec3) { self.dir = dir; } @@ -96,7 +64,6 @@ impl CameraState { ] } - pub fn get_view(&self) -> [[f32; 4]; 4] { let f = norm(&self.dir);