dungeon_crawler

annotate prototype/src/camera.h @ 31:ddb68dc4ba07

OBJ hack
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 27 Aug 2012 04:14:04 +0300
parents 96de911d05d4
children aa9e28670ae2
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@7 36 protected:
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@7 50 class FpsCamera : public OrbitCamera {
nuclear@7 51 protected:
nuclear@7 52 Vector3 pos;
nuclear@7 53
nuclear@7 54 void calc_matrix(Matrix4x4 *mat) const;
nuclear@7 55 void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@7 56
nuclear@7 57 public:
nuclear@7 58 void input_move(float x, float y, float z);
nuclear@7 59 };
nuclear@7 60
nuclear@1 61 class FlyCamera : public Camera {
nuclear@1 62 private:
nuclear@1 63 Vector3 pos;
nuclear@1 64 Quaternion rot;
nuclear@1 65
nuclear@1 66 void calc_matrix(Matrix4x4 *mat) const;
nuclear@1 67 //void calc_inv_matrix(Matrix4x4 *mat) const;
nuclear@1 68
nuclear@1 69 public:
nuclear@1 70 FlyCamera();
nuclear@1 71
nuclear@1 72 const Vector3 &get_position() const;
nuclear@1 73 const Quaternion &get_rotation() const;
nuclear@1 74
nuclear@1 75 void input_move(float x, float y, float z);
nuclear@1 76 void input_rotate(float x, float y, float z);
nuclear@1 77 };
nuclear@1 78
nuclear@1 79
nuclear@1 80 #endif // CAMERA_H_