|
@@ -11,15 +11,7 @@
|
11
|
11
|
#include "utils/math.h"
|
12
|
12
|
#include "Camera.h"
|
13
|
13
|
|
14
|
|
-unsigned int Camera::mCounter = 0;
|
15
|
|
-
|
16
|
|
-////////////////////////////////////////////////////////////
|
17
|
|
-// Constructors
|
18
|
|
-////////////////////////////////////////////////////////////
|
19
|
|
-
|
20
|
|
-Camera::Camera()
|
21
|
|
-{
|
22
|
|
- mId = ++mCounter;
|
|
14
|
+Camera::Camera() {
|
23
|
15
|
mFlags = 0;
|
24
|
16
|
mViewDistance = 14.0f;
|
25
|
17
|
mTranslateDelta = 256.0f;
|
|
@@ -29,70 +21,40 @@ Camera::Camera()
|
29
|
21
|
reset();
|
30
|
22
|
}
|
31
|
23
|
|
32
|
|
-
|
33
|
|
-Camera::~Camera()
|
34
|
|
-{
|
|
24
|
+Camera::~Camera() {
|
35
|
25
|
}
|
36
|
26
|
|
37
|
|
-
|
38
|
|
-////////////////////////////////////////////////////////////
|
39
|
|
-// Public Accessors
|
40
|
|
-////////////////////////////////////////////////////////////
|
41
|
|
-
|
42
|
|
-unsigned int Camera::getId()
|
43
|
|
-{
|
44
|
|
- return mId;
|
45
|
|
-}
|
46
|
|
-
|
47
|
|
-
|
48
|
|
-void Camera::getPosition(vec3_t pos)
|
49
|
|
-{
|
|
27
|
+void Camera::getPosition(vec3_t pos) {
|
50
|
28
|
pos[0] = mPos[0];
|
51
|
29
|
pos[1] = mPos[1];
|
52
|
30
|
pos[2] = mPos[2];
|
53
|
31
|
}
|
54
|
32
|
|
55
|
|
-
|
56
|
|
-void Camera::getUp(vec3_t up)
|
57
|
|
-{
|
|
33
|
+void Camera::getUp(vec3_t up) {
|
58
|
34
|
up[0] = mUp[0];
|
59
|
35
|
up[1] = mUp[1];
|
60
|
36
|
up[2] = mUp[2];
|
61
|
37
|
}
|
62
|
38
|
|
63
|
|
-
|
64
|
|
-void Camera::getTarget(vec3_t target)
|
65
|
|
-{
|
|
39
|
+void Camera::getTarget(vec3_t target) {
|
66
|
40
|
target[0] = mTarget[0];
|
67
|
41
|
target[1] = mTarget[1];
|
68
|
42
|
target[2] = mTarget[2];
|
69
|
43
|
}
|
70
|
44
|
|
71
|
|
-
|
72
|
|
-float Camera::getYaw()
|
73
|
|
-{
|
|
45
|
+float Camera::getYaw() {
|
74
|
46
|
return HEL_RAD_TO_DEG(mTheta);
|
75
|
47
|
}
|
76
|
48
|
|
77
|
|
-
|
78
|
|
-vec_t Camera::getRadianYaw()
|
79
|
|
-{
|
|
49
|
+vec_t Camera::getRadianYaw() {
|
80
|
50
|
return mTheta;
|
81
|
51
|
}
|
82
|
52
|
|
83
|
|
-
|
84
|
|
-vec_t Camera::getRadianPitch()
|
85
|
|
-{
|
|
53
|
+vec_t Camera::getRadianPitch() {
|
86
|
54
|
return mTheta2;
|
87
|
55
|
}
|
88
|
56
|
|
89
|
|
-
|
90
|
|
-////////////////////////////////////////////////////////////
|
91
|
|
-// Public Mutators
|
92
|
|
-////////////////////////////////////////////////////////////
|
93
|
|
-
|
94
|
|
-void Camera::rotate(float angle, float x, float y, float z)
|
95
|
|
-{
|
|
57
|
+void Camera::rotate(float angle, float x, float y, float z) {
|
96
|
58
|
Quaternion t, n;
|
97
|
59
|
Matrix matrix;
|
98
|
60
|
vec_t side[4] = { 1.0f, 0.0f, 0.0f, 1.0f };
|
|
@@ -101,7 +63,6 @@ void Camera::rotate(float angle, float x, float y, float z)
|
101
|
63
|
unsigned int i;
|
102
|
64
|
matrix_t m;
|
103
|
65
|
|
104
|
|
-
|
105
|
66
|
t.set(angle, x, y, z);
|
106
|
67
|
n = mQ * t;
|
107
|
68
|
n.normalize();
|
|
@@ -112,8 +73,7 @@ void Camera::rotate(float angle, float x, float y, float z)
|
112
|
73
|
matrix.multiply4v(look, mTarget);
|
113
|
74
|
matrix.multiply4v(up, mUp);
|
114
|
75
|
|
115
|
|
- for (i = 0; i < 3; ++i)
|
116
|
|
- {
|
|
76
|
+ for (i = 0; i < 3; ++i) {
|
117
|
77
|
mSide[i] += mPos[i];
|
118
|
78
|
mTarget[i] += mPos[i];
|
119
|
79
|
mUp[i] += mPos[i];
|
|
@@ -122,16 +82,13 @@ void Camera::rotate(float angle, float x, float y, float z)
|
122
|
82
|
mQ = n;
|
123
|
83
|
}
|
124
|
84
|
|
125
|
|
-
|
126
|
|
-void Camera::translate(float x, float y, float z)
|
127
|
|
-{
|
|
85
|
+void Camera::translate(float x, float y, float z) {
|
128
|
86
|
int i;
|
129
|
87
|
vec_t result[4];
|
130
|
88
|
vec_t v[4];
|
131
|
89
|
matrix_t m;
|
132
|
90
|
Matrix matrix;
|
133
|
91
|
|
134
|
|
-
|
135
|
92
|
v[0] = x;
|
136
|
93
|
v[1] = y;
|
137
|
94
|
v[2] = -z;
|
|
@@ -157,8 +114,7 @@ void Camera::translate(float x, float y, float z)
|
157
|
114
|
matrix.setMatrix(m);
|
158
|
115
|
matrix.multiply4v(v, result);
|
159
|
116
|
|
160
|
|
- for (i = 0; i < 3; ++i)
|
161
|
|
- {
|
|
117
|
+ for (i = 0; i < 3; ++i) {
|
162
|
118
|
mSide[i] += result[i];
|
163
|
119
|
mUp[i] += result[i];
|
164
|
120
|
mTarget[i] += result[i];
|
|
@@ -170,9 +126,7 @@ void Camera::translate(float x, float y, float z)
|
170
|
126
|
mPos[2] = z;
|
171
|
127
|
}
|
172
|
128
|
|
173
|
|
-
|
174
|
|
-void Camera::reset()
|
175
|
|
-{
|
|
129
|
+void Camera::reset() {
|
176
|
130
|
mTheta = 0.0f;
|
177
|
131
|
mTheta2 = 0.0f;
|
178
|
132
|
|
|
@@ -196,38 +150,26 @@ void Camera::reset()
|
196
|
150
|
translate(0.0f, 0.0f, 0.0f);
|
197
|
151
|
}
|
198
|
152
|
|
199
|
|
-
|
200
|
|
-void Camera::setSensitivityY(float angle)
|
201
|
|
-{
|
|
153
|
+void Camera::setSensitivityY(float angle) {
|
202
|
154
|
mRotateDelta2 = HEL_DEG_TO_RAD(angle);
|
203
|
155
|
}
|
204
|
156
|
|
205
|
|
-
|
206
|
|
-void Camera::setSensitivityX(float angle)
|
207
|
|
-{
|
|
157
|
+void Camera::setSensitivityX(float angle) {
|
208
|
158
|
mRotateDelta = HEL_DEG_TO_RAD(angle);
|
209
|
159
|
}
|
210
|
160
|
|
211
|
|
-
|
212
|
|
-////////
|
213
|
|
-void Camera::command(enum camera_command cmd)
|
214
|
|
-{
|
215
|
|
- switch (cmd)
|
216
|
|
- {
|
|
161
|
+void Camera::command(enum camera_command cmd) {
|
|
162
|
+ switch (cmd) {
|
217
|
163
|
case CAMERA_MOVE_FORWARD:
|
218
|
164
|
if (mFlags & Camera_FlyMode)
|
219
|
|
- {
|
220
|
165
|
mPos[2] += (mTranslateDelta * cosf(mTheta));
|
221
|
|
- }
|
222
|
166
|
|
223
|
167
|
mPos[0] += (mTranslateDelta * sinf(mTheta));
|
224
|
168
|
mPos[1] += (mTranslateDelta * sinf(mTheta2));
|
225
|
169
|
break;
|
226
|
170
|
case CAMERA_MOVE_BACKWARD:
|
227
|
171
|
if (mFlags & Camera_FlyMode)
|
228
|
|
- {
|
229
|
172
|
mPos[2] -= (mTranslateDelta * cosf(mTheta));
|
230
|
|
- }
|
231
|
173
|
|
232
|
174
|
mPos[0] -= (mTranslateDelta * sinf(mTheta));
|
233
|
175
|
mPos[1] -= (mTranslateDelta * sinf(mTheta2));
|
|
@@ -278,75 +220,31 @@ void Camera::command(enum camera_command cmd)
|
278
|
220
|
}
|
279
|
221
|
}
|
280
|
222
|
|
281
|
|
-
|
282
|
|
-//! \fixme Mostly invalid for QUAT_CAM (can rotate on XYZ)
|
283
|
|
-bool Camera::isBehind(int x, int z)
|
284
|
|
-{
|
285
|
|
- vec_t bTheta, bCameraX, bCameraZ, Distance;
|
286
|
|
-
|
287
|
|
-
|
288
|
|
- // Set up a "virtual camera" a huge distance behind us
|
289
|
|
- bTheta = mTheta + HEL_PI;
|
290
|
|
-
|
291
|
|
- if (bTheta > HEL_PI)
|
292
|
|
- bTheta -= HEL_2_PI;
|
293
|
|
-
|
294
|
|
- // 64k is a fair distance away...
|
295
|
|
- bCameraX = (65536.0f * sinf(bTheta)) + mPos[0];
|
296
|
|
- bCameraZ = (65536.0f * cosf(bTheta)) + mPos[2];
|
297
|
|
-
|
298
|
|
- bCameraX -= x;
|
299
|
|
- bCameraZ -= z;
|
300
|
|
- Distance = sqrtf((bCameraX * bCameraX) + (bCameraZ * bCameraZ));
|
301
|
|
-
|
302
|
|
- return (Distance < 65536.0f);
|
303
|
|
-}
|
304
|
|
-
|
305
|
|
-
|
306
|
|
-void Camera::setSpeed(float s)
|
307
|
|
-{
|
|
223
|
+void Camera::setSpeed(float s) {
|
308
|
224
|
mTranslateDelta = s;
|
309
|
225
|
}
|
310
|
226
|
|
311
|
|
-
|
312
|
|
-void Camera::update()
|
313
|
|
-{
|
|
227
|
+void Camera::update() {
|
314
|
228
|
mTarget[2] = (mViewDistance * cosf(mTheta)) + mPos[2];
|
315
|
229
|
mTarget[0] = (mViewDistance * sinf(mTheta)) + mPos[0];
|
316
|
230
|
mTarget[1] = (mViewDistance * sinf(mTheta2)) + mPos[1]; // + height_offset;
|
317
|
231
|
}
|
318
|
232
|
|
319
|
|
-
|
320
|
|
-void Camera::setPosition(vec3_t pos)
|
321
|
|
-{
|
|
233
|
+void Camera::setPosition(vec3_t pos) {
|
322
|
234
|
mPos[0] = pos[0];
|
323
|
235
|
mPos[1] = pos[1];
|
324
|
236
|
mPos[2] = pos[2];
|
325
|
237
|
}
|
326
|
238
|
|
327
|
|
-
|
328
|
|
-void Camera::setUp(vec3_t up)
|
329
|
|
-{
|
|
239
|
+void Camera::setUp(vec3_t up) {
|
330
|
240
|
mUp[0] = up[0];
|
331
|
241
|
mUp[1] = up[1];
|
332
|
242
|
mUp[2] = up[2];
|
333
|
243
|
}
|
334
|
244
|
|
335
|
|
-
|
336
|
|
-void Camera::setTarget(vec3_t target)
|
337
|
|
-{
|
|
245
|
+void Camera::setTarget(vec3_t target) {
|
338
|
246
|
mTarget[0] = target[0];
|
339
|
247
|
mTarget[1] = target[1];
|
340
|
248
|
mTarget[2] = target[2];
|
341
|
249
|
}
|
342
|
250
|
|
343
|
|
-
|
344
|
|
-////////////////////////////////////////////////////////////
|
345
|
|
-// Private Accessors
|
346
|
|
-////////////////////////////////////////////////////////////
|
347
|
|
-
|
348
|
|
-
|
349
|
|
-////////////////////////////////////////////////////////////
|
350
|
|
-// Private Mutators
|
351
|
|
-////////////////////////////////////////////////////////////
|
352
|
|
-
|