intravenous
annotate src/camera.h @ 1:3ea290d35984
it's never going to finish but wth :)
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 21 Apr 2012 22:42:43 +0300 |
parents | |
children |
rev | line source |
---|---|
nuclear@1 | 1 #ifndef CAMERA_H_ |
nuclear@1 | 2 #define CAMERA_H_ |
nuclear@1 | 3 |
nuclear@1 | 4 #include "vmath/vmath.h" |
nuclear@1 | 5 |
nuclear@1 | 6 class Camera { |
nuclear@1 | 7 protected: |
nuclear@1 | 8 mutable struct { |
nuclear@1 | 9 bool valid; |
nuclear@1 | 10 Matrix4x4 mat; |
nuclear@1 | 11 } mcache, mcache_inv; |
nuclear@1 | 12 |
nuclear@1 | 13 virtual void calc_matrix(Matrix4x4 *mat) const = 0; |
nuclear@1 | 14 virtual void calc_inv_matrix(Matrix4x4 *mat) const; |
nuclear@1 | 15 |
nuclear@1 | 16 void inval_cache() { mcache.valid = mcache_inv.valid = false; } |
nuclear@1 | 17 void set_glmat(const Matrix4x4 &m) const; |
nuclear@1 | 18 |
nuclear@1 | 19 public: |
nuclear@1 | 20 Camera(); |
nuclear@1 | 21 virtual ~Camera(); |
nuclear@1 | 22 |
nuclear@1 | 23 const Matrix4x4 &matrix() const; |
nuclear@1 | 24 const Matrix4x4 &inv_matrix() const; |
nuclear@1 | 25 |
nuclear@1 | 26 void use() const; |
nuclear@1 | 27 void use_inverse() const; |
nuclear@1 | 28 |
nuclear@1 | 29 // these do nothing, override to provide input handling |
nuclear@1 | 30 virtual void input_move(float x, float y, float z); |
nuclear@1 | 31 virtual void input_rotate(float x, float y, float z); |
nuclear@1 | 32 virtual void input_zoom(float factor); |
nuclear@1 | 33 }; |
nuclear@1 | 34 |
nuclear@1 | 35 class OrbitCamera : public Camera { |
nuclear@1 | 36 private: |
nuclear@1 | 37 float theta, phi, rad; |
nuclear@1 | 38 |
nuclear@1 | 39 void calc_matrix(Matrix4x4 *mat) const; |
nuclear@1 | 40 void calc_inv_matrix(Matrix4x4 *mat) const; |
nuclear@1 | 41 |
nuclear@1 | 42 public: |
nuclear@1 | 43 OrbitCamera(); |
nuclear@1 | 44 virtual ~OrbitCamera(); |
nuclear@1 | 45 |
nuclear@1 | 46 void input_rotate(float x, float y, float z); |
nuclear@1 | 47 void input_zoom(float factor); |
nuclear@1 | 48 }; |
nuclear@1 | 49 |
nuclear@1 | 50 class FlyCamera : public Camera { |
nuclear@1 | 51 private: |
nuclear@1 | 52 Vector3 pos; |
nuclear@1 | 53 Quaternion rot; |
nuclear@1 | 54 |
nuclear@1 | 55 void calc_matrix(Matrix4x4 *mat) const; |
nuclear@1 | 56 //void calc_inv_matrix(Matrix4x4 *mat) const; |
nuclear@1 | 57 |
nuclear@1 | 58 public: |
nuclear@1 | 59 FlyCamera(); |
nuclear@1 | 60 |
nuclear@1 | 61 const Vector3 &get_position() const; |
nuclear@1 | 62 const Quaternion &get_rotation() const; |
nuclear@1 | 63 |
nuclear@1 | 64 void input_move(float x, float y, float z); |
nuclear@1 | 65 void input_rotate(float x, float y, float z); |
nuclear@1 | 66 }; |
nuclear@1 | 67 |
nuclear@1 | 68 |
nuclear@1 | 69 #endif // CAMERA_H_ |