use super::*;
const PAN_SPEED: f32 = 0.001;
#[derive(Clone, Debug)]
pub struct PlanarCamera {
pub position: Vec3f,
pub view_dir: Vec3f,
pub right: Vec3f,
pub forward: Vec3f,
}
impl PlanarCamera {
pub fn new(position: Vec3f, view_dir: Vec3f, right: Vec3f, forward: Vec3f) -> PlanarCamera {
PlanarCamera { position, view_dir: view_dir.norm(), right: right.norm(), forward: forward.norm() }
}
pub fn pan(&mut self, dir: Vec3f) {
let up = self.forward.cross(self.right).norm();
self.position += self.right * (dir.x * PAN_SPEED) + self.forward * (dir.y * PAN_SPEED) + up * (dir.z * PAN_SPEED);
}
#[inline]
pub fn position(&self) -> Vec3f {
self.position
}
#[inline]
pub fn view_dir(&self) -> Vec3f {
self.view_dir
}
pub fn view_matrix(&self, hand: Hand) -> Transform3f {
Transform3f::look_at(self.position, self.position + self.view_dir, self.forward, hand)
}
}