-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCamera.h
191 lines (150 loc) · 3.55 KB
/
Camera.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#ifndef CAMERA_H
#define CAMERA_H
#include <GL/gl.h>
#include <GL/freeglut.h>
#include <boost/property_tree/ptree.hpp>
#include <string>
using namespace std;
using namespace boost::property_tree;
class Camera {
public:
/** Camera types. */
enum typeEnum {STATIC, DYNAMIC, WALK, FREE};
/** Size of camera step. */
float step;
/** Size of rotation angle step. */
float rotationAngleStep;
/** Size of elevation angle step. */
float elevationAngleStep;
/** Actual size of rotation angle. */
float rotationAngle;
/** Actual size of elevation angle. */
float elevationAngle;
/**
* Create new camera.
* @param _name Camera name.
* @param _config Configuration.
*/
Camera(const string& _name, ptree& _config);
/**
* Destroy camera.
*/
virtual ~Camera(void);
/**
* Set up camera position.
* @param _x X coordinate.
* @param _y Y coordinate.
* @param _z Z coordinate.
*/
void setPosition(GLfloat _x, GLfloat _y, GLfloat _z);
/**
* Get camera position.
* @return Camera position.
*/
GLfloat* getPosition(void);
/**
* Set up view direction.
* @param _x X coordinate.
* @param _y Y coordinate.
* @param _z Z coordinate.
*/
void setViewDirection(GLfloat _x, GLfloat _y, GLfloat _z);
/**
* Set up upvector.
* @param _x X coordinate.
* @param _y Y coordinate.
* @param _z Z coordinate.
*/
void setUpvector(GLfloat _x, GLfloat _y, GLfloat _z);
/**
* Set up motion direction.
* @param _x X coordinate.
* @param _y Y coordinate.
* @param _z Z coordinate.
*/
void setMotionDirection(GLfloat _x, GLfloat _y, GLfloat _z);
/**
* Place camera.
*/
void look(void);
/**
* Turn camera left.
*/
void turnLeft(void);
/**
* Turn camera right.
*/
void turnRight(void);
/**
* Pick up camera view.
*/
void turnUp(void);
/**
* Put down camera view.
*/
void turnDown(void);
/**
* Move camera forward.
*/
void stepForward(void);
/**
* Move camera back.
*/
void stepBackward(void);
/**
* Set up camera according to the given camera.
* @param camera Given camera.
*/
void loadConfig(const Camera* camera);
/**
* Set camera type.
* @param type Camera type.
*/
void setType(typeEnum _type);
/**
* Get camera type.
* @return Camera type.
*/
Camera::typeEnum getType(void);
/**
* Write out information about camera.
* @param _os Output stream.
* @param _camera Described camera.
* @return Output stream.
*/
friend ostream& operator<<(ostream& _os, Camera& _camera);
private:
/** Camera position. */
GLfloat position[3];
/** View direction. */
GLfloat viewDirection[3];
/** Upvector. */
GLfloat upvector[3];
/** Motion direction. */
GLfloat motionDirection[3];
typeEnum type;
/**
* Load camera configuration.
* @param _name Name of camera.
* @param _config Configuration.
*/
void loadConfig(const string& _name, ptree& _config);
void (Camera::*lookFce)(void);
/**
* Place static camera.
*/
void lookStatic(void);
/**
* Place dynamic camera.
*/
void lookDynamic(void);
/**
* Place walking camera.
*/
void lookWalk(void);
/**
* Place free camera.
*/
void lookFree(void);
};
#endif /* CAMERA_H */