oculus1

annotate src/camera.h @ 9:b66b54a68dfd

tracking almost done
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 19 Sep 2013 06:36:48 +0300
parents 681046a82ed2
children b2abb08c8f94
rev   line source
nuclear@0 1 #ifndef CAMERA_H_
nuclear@0 2 #define CAMERA_H_
nuclear@0 3
nuclear@5 4 #include "vmath/vmath.h"
nuclear@5 5
nuclear@0 6 class Camera {
nuclear@5 7 protected:
nuclear@5 8 mutable struct {
nuclear@5 9 bool valid;
nuclear@5 10 Matrix4x4 mat;
nuclear@5 11 } mcache, mcache_inv;
nuclear@5 12
nuclear@5 13 virtual void calc_matrix(Matrix4x4 *mat) const = 0;
nuclear@5 14 virtual void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@5 15
nuclear@5 16 void inval_cache() { mcache.valid = mcache_inv.valid = false; }
nuclear@5 17 void set_glmat(const Matrix4x4 &m) const;
nuclear@5 18
nuclear@0 19 public:
nuclear@5 20 Camera();
nuclear@5 21 virtual ~Camera();
nuclear@5 22
nuclear@5 23 const Matrix4x4 &matrix() const;
nuclear@5 24 const Matrix4x4 &inv_matrix() const;
nuclear@5 25
nuclear@5 26 void use() const;
nuclear@5 27 void use_inverse() const;
nuclear@5 28
nuclear@5 29 // these do nothing, override to provide input handling
nuclear@5 30 virtual void input_move(float x, float y, float z);
nuclear@5 31 virtual void input_rotate(float x, float y, float z);
nuclear@5 32 virtual void input_zoom(float factor);
nuclear@0 33 };
nuclear@0 34
nuclear@5 35 class OrbitCamera : public Camera {
nuclear@9 36 protected:
nuclear@5 37 float theta, phi, rad;
nuclear@5 38
nuclear@5 39 void calc_matrix(Matrix4x4 *mat) const;
nuclear@5 40 void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@5 41
nuclear@5 42 public:
nuclear@5 43 OrbitCamera();
nuclear@5 44 virtual ~OrbitCamera();
nuclear@5 45
nuclear@5 46 void input_rotate(float x, float y, float z);
nuclear@5 47 void input_zoom(float factor);
nuclear@5 48 };
nuclear@5 49
nuclear@9 50 class FpsCamera : public OrbitCamera {
nuclear@9 51 protected:
nuclear@9 52 Vector3 pos;
nuclear@9 53
nuclear@9 54 void calc_matrix(Matrix4x4 *mat) const;
nuclear@9 55 void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@9 56
nuclear@9 57 public:
nuclear@9 58 void input_move(float x, float y, float z);
nuclear@9 59
nuclear@9 60 const Vector3 &get_position() const;
nuclear@9 61 };
nuclear@9 62
nuclear@5 63 class FlyCamera : public Camera {
nuclear@5 64 private:
nuclear@5 65 Vector3 pos;
nuclear@5 66 Quaternion rot;
nuclear@5 67
nuclear@5 68 void calc_matrix(Matrix4x4 *mat) const;
nuclear@5 69 //void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@5 70
nuclear@5 71 public:
nuclear@5 72 FlyCamera();
nuclear@5 73
nuclear@5 74 const Vector3 &get_position() const;
nuclear@5 75 const Quaternion &get_rotation() const;
nuclear@5 76
nuclear@5 77 void input_move(float x, float y, float z);
nuclear@5 78 void input_rotate(float x, float y, float z);
nuclear@5 79 };
nuclear@5 80
nuclear@5 81
nuclear@0 82 #endif // CAMERA_H_