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@5
|
36 private:
|
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@5
|
50 class FlyCamera : public Camera {
|
nuclear@5
|
51 private:
|
nuclear@5
|
52 Vector3 pos;
|
nuclear@5
|
53 Quaternion rot;
|
nuclear@5
|
54
|
nuclear@5
|
55 void calc_matrix(Matrix4x4 *mat) const;
|
nuclear@5
|
56 //void calc_inv_matrix(Matrix4x4 *mat) const;
|
nuclear@5
|
57
|
nuclear@5
|
58 public:
|
nuclear@5
|
59 FlyCamera();
|
nuclear@5
|
60
|
nuclear@5
|
61 const Vector3 &get_position() const;
|
nuclear@5
|
62 const Quaternion &get_rotation() const;
|
nuclear@5
|
63
|
nuclear@5
|
64 void input_move(float x, float y, float z);
|
nuclear@5
|
65 void input_rotate(float x, float y, float z);
|
nuclear@5
|
66 };
|
nuclear@5
|
67
|
nuclear@5
|
68
|
nuclear@0
|
69 #endif // CAMERA_H_
|