-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCamera.cpp
More file actions
100 lines (80 loc) · 2.01 KB
/
Camera.cpp
File metadata and controls
100 lines (80 loc) · 2.01 KB
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
#include "Camera.h"
#include "OpenGLHelpers.h"
Camera::Camera(const vec3& position, const vec3& target, const vec3& up) :
mPosition(position), mTarget(target), mUpVector(up) {
}
void Camera::setPosition(const vec3& position) {
mPosition = position;
}
void Camera::setTarget(const vec3& target) {
mTarget = target;
}
void Camera::setUpVector(const vec3& up) {
mUpVector = up;
}
vec3 Camera::getPosition() const {
return mPosition;
}
vec3 Camera::getTarget() const {
return mTarget;
}
vec3 Camera::getUpVector() const {
return mUpVector;
}
vec3 Camera::getDirection() const
{
vec3 dir = mTarget - mPosition;
dir.normalize();
return dir;
}
void Camera::setCameraMatrix() {
gluLookAt(
mPosition.x,mPosition.y, mPosition.z,
mTarget.x, mTarget.y, mTarget.z,
mUpVector.x, mUpVector.y, mUpVector.z
);
}
FirstPersonCamera::FirstPersonCamera() :
Camera(vec3(), vec3(0, 0, 1.0f), vec3(0, 1.0, 0)),
cameraOriginalUp(0, 1, 0),
cameraOriginalLook(0, 0, -1),
cameraOriginalStrafe(1, 0, 0),
pitch(0.0f),
yaw(0.0f)
{
mUpVector = cameraOriginalUp;
mPosition = 0.0;
mDirection = cameraOriginalLook;
mTarget = mPosition + mDirection;
mStrafeDirection = cameraOriginalStrafe;
}
void FirstPersonCamera::move(float step) {
mPosition += mDirection*step;
mTarget = mPosition + mDirection;
}
void FirstPersonCamera::strafe(float step) {
mPosition += mStrafeDirection*step;
mTarget = mPosition + mDirection;
}
void FirstPersonCamera::changePitch(float step) {
pitch+=step;
if(pitch>(1.553343f)) pitch = (1.553343f);
if(pitch<(-1.553343f)) pitch = (-1.553343f);
updateAxes();
}
void FirstPersonCamera::changeYaw(float step) {
yaw+=step;
updateAxes();
}
void FirstPersonCamera::updateAxes() {
mDirection = cameraOriginalLook;
mDirection.rotate(pitch, yaw, 0);
mDirection.normalize();
mStrafeDirection = cameraOriginalStrafe;
mStrafeDirection.rotate(pitch, yaw, 0);
mStrafeDirection.normalize();
mUpVector = cameraOriginalUp;
mUpVector.rotate(pitch, yaw, 0);
mUpVector.normalize();
mTarget = mPosition + mDirection;
}