oculus1

annotate src/camera.h @ 23:0c76f70fb7e9

merged
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 28 Sep 2013 04:13:33 +0300
parents b2abb08c8f94
children
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@10 8 float roll;
nuclear@10 9
nuclear@5 10 mutable struct {
nuclear@5 11 bool valid;
nuclear@5 12 Matrix4x4 mat;
nuclear@5 13 } mcache, mcache_inv;
nuclear@5 14
nuclear@5 15 virtual void calc_matrix(Matrix4x4 *mat) const = 0;
nuclear@5 16 virtual void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@5 17
nuclear@5 18 void inval_cache() { mcache.valid = mcache_inv.valid = false; }
nuclear@5 19 void set_glmat(const Matrix4x4 &m) const;
nuclear@5 20
nuclear@0 21 public:
nuclear@5 22 Camera();
nuclear@5 23 virtual ~Camera();
nuclear@5 24
nuclear@5 25 const Matrix4x4 &matrix() const;
nuclear@5 26 const Matrix4x4 &inv_matrix() const;
nuclear@5 27
nuclear@5 28 void use() const;
nuclear@5 29 void use_inverse() const;
nuclear@5 30
nuclear@5 31 // these do nothing, override to provide input handling
nuclear@5 32 virtual void input_move(float x, float y, float z);
nuclear@5 33 virtual void input_rotate(float x, float y, float z);
nuclear@5 34 virtual void input_zoom(float factor);
nuclear@0 35 };
nuclear@0 36
nuclear@5 37 class OrbitCamera : public Camera {
nuclear@9 38 protected:
nuclear@5 39 float theta, phi, rad;
nuclear@5 40
nuclear@5 41 void calc_matrix(Matrix4x4 *mat) const;
nuclear@5 42 void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@5 43
nuclear@5 44 public:
nuclear@5 45 OrbitCamera();
nuclear@5 46 virtual ~OrbitCamera();
nuclear@5 47
nuclear@5 48 void input_rotate(float x, float y, float z);
nuclear@5 49 void input_zoom(float factor);
nuclear@5 50 };
nuclear@5 51
nuclear@9 52 class FpsCamera : public OrbitCamera {
nuclear@9 53 protected:
nuclear@9 54 Vector3 pos;
nuclear@9 55
nuclear@9 56 void calc_matrix(Matrix4x4 *mat) const;
nuclear@9 57 void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@9 58
nuclear@9 59 public:
nuclear@9 60 void input_move(float x, float y, float z);
nuclear@9 61
nuclear@9 62 const Vector3 &get_position() const;
nuclear@9 63 };
nuclear@9 64
nuclear@5 65 class FlyCamera : public Camera {
nuclear@5 66 private:
nuclear@5 67 Vector3 pos;
nuclear@5 68 Quaternion rot;
nuclear@5 69
nuclear@5 70 void calc_matrix(Matrix4x4 *mat) const;
nuclear@5 71 //void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@5 72
nuclear@5 73 public:
nuclear@5 74 FlyCamera();
nuclear@5 75
nuclear@5 76 const Vector3 &get_position() const;
nuclear@5 77 const Quaternion &get_rotation() const;
nuclear@5 78
nuclear@5 79 void input_move(float x, float y, float z);
nuclear@5 80 void input_rotate(float x, float y, float z);
nuclear@5 81 };
nuclear@5 82
nuclear@5 83
nuclear@10 84 class VRFpsCamera : public FpsCamera {
nuclear@10 85 private:
nuclear@11 86 float neck_eye_dist;
nuclear@10 87 float prev_angles[3];
nuclear@10 88
nuclear@11 89 void calc_matrix(Matrix4x4 *mat) const;
nuclear@11 90 void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@11 91
nuclear@10 92 public:
nuclear@11 93 VRFpsCamera();
nuclear@11 94
nuclear@10 95 void track_vr();
nuclear@10 96 };
nuclear@10 97
nuclear@0 98 #endif // CAMERA_H_