-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcamera.cpp
More file actions
85 lines (79 loc) · 1.95 KB
/
camera.cpp
File metadata and controls
85 lines (79 loc) · 1.95 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
#include <GL/glut.h>
#include <cmath>
#include "camera.h"
Camera::Camera(){
//initial camera values
eyex = 0;
eyey = 5;
eyez = 1;
centerx = 0;
centery = 0;
centerz = 1;
upx = 0;
upy = 1;
upz = 0;
centerholdx = 0;
eyeholdx = 0;
centerholdz = 0;
eyeholdz = 0;
xdir = -1;
zdir = 1;
deltax = 0.0;
deltaz = 0.0;
speed = 0.5;
}
void Camera::moveForward(){
//make old view point the new camera point
eyex = centerx;
centerx = centerx;
eyey = centery;
centery = centery;
eyez = centerz;
centerz = centerz;
}
void Camera::moveBackward(){
//2 * point that you're currently at - point that you're looking at
eyex = 2 * eyex - centerx;
centerx = 2 * eyex - centerx;
eyey = 2 * eyey - centery;
centery = 2 * eyey - centery;
eyez = 2 * eyez - centerz;
centerz = 2 * eyez - centerz;
}
void Camera::updateDeltas(double dx, double dz){
//voodoo math
deltaz = (centerx - eyex) / (centerz - eyez);
deltax = -1 / sqrt(1 + deltaz * deltaz);
deltaz = deltaz / sqrt(1 + deltaz * deltaz);
}
void Camera::strafeLeft(float pitch, float yaw){
//updateDeltas(deltax, deltaz);
//std::cout<<"fmod(abs(yaw), 360: "<<fmod(abs(yaw), 360)<<std::endl;
if((fmod(abs(yaw), 360)) >= 0 && (fmod(abs(yaw), 360) <= 180) && yaw >= 0){
//if(true){ //I don't think the above is necessary, so testing it with this
eyex += deltax * -1 * speed;
eyez += deltaz * -1 * speed;
centerx += deltax * -1 * speed;
centerz += deltaz * -1 * speed;
} else {
eyex -= deltax * -1 * speed;
eyez -= deltaz * -1 * speed;
centerx -= deltax * -1 * speed;
centerz -= deltaz * -1 * speed;
}
}
void Camera::strafeRight(float pitch, float yaw){
//updateDeltas(deltax, deltaz);
if((fmod(abs(yaw), 360)) >= 0 && (fmod(abs(yaw), 360) <= 180) && yaw >= 0){
//if(true){
eyex += deltax * speed;
eyez += deltaz * speed;
centerx += deltax * speed;
centerz += deltaz * speed;
} else {
eyex -= deltax * speed;
eyez -= deltaz * speed;
centerx -= deltax * speed;
centerz -= deltaz * speed;
}
}