3D City v-1.0
Computer Graphics Project
camera.h
Go to the documentation of this file.
1#pragma once
2#include "transformations.h"
6class camera {
7 public:
11
13 float nearPoint{-1}, farPoint{-10};
14 float FOV{90};
15 float sensitivity = 0.000005;
16 float speed = 0.00001;
17
18 camera() : viewDir(0.0f, 0.0f, -1.0f), eye(0.0f, 0.0f, 20.0f), up(0.0f, 1.0f, 0.0f), pitchAngle(0) {
20 }
21
22 camera(const vec3 &pos, const vec3 &up, const vec3 &dir) : viewDir(dir), up(vec3::normalize(up)), eye(pos), pitchAngle(0) {
24 }
25
26 void changeDir(vec3 dir) {
27 viewDir = std::move(dir);
28 up = vec3(0, 1, 0);
29 correct();
30 }
31
32 void newDelYaw(float angle_in_deg) {
33 auto rot = trans::rotation(angle_in_deg * radian, up);
34 viewDir = rot * (vec4)viewDir;
36 up = vec3(0, 1, 0);
37 correct();
38 }
39
40 void DelRoll(float angle_in_deg) {
41 up = trans::rotation(angle_in_deg * radian, (viewDir)) * (vec4)up;
42 up.normalize();
43 }
44
45 void DelYaw(float angle_in_deg) {
46 auto rot = trans::rotation(angle_in_deg * radian, up);
47 viewDir = rot * (vec4)viewDir;
49 }
50
51 void DelPitch(float angle_in_deg) {
52 if (pitchAngle + angle_in_deg > 90) {
53 pitchAngle = 90;
54 } else if (pitchAngle + angle_in_deg < -90) {
55 pitchAngle = -90;
56 } else {
57 vec3 right = vec3::cross(viewDir, up);
58 auto rot = trans::rotation(angle_in_deg * radian, right);
59 up = vec3(rot * (vec4)up);
60 viewDir = vec3(rot * (vec4)viewDir);
62 auto dot = vec3::dot(viewDir, vec3(0, 1, 0));
63 pitchAngle = 90 - acosf(dot) * 180 / pi;
64 }
65 }
66
67 vec3 getUp() const { return up; }
68 vec3 getViewDir() const { return viewDir; }
69
70 private:
71 inline void checkCorrectness() {
72 auto dot = vec3::dot(viewDir, up);
73 if (dot > epsilon && dot < -epsilon) {
74 correct();
75 }
76 }
77 inline void correct() {
79 }
80};
camera class implementing simple camera movement
Definition: camera.h:6
vec3 getViewDir() const
Definition: camera.h:68
float pitchAngle
Definition: camera.h:10
void DelPitch(float angle_in_deg)
Definition: camera.h:51
vec3 up
Definition: camera.h:9
float nearPoint
Definition: camera.h:13
void DelYaw(float angle_in_deg)
Definition: camera.h:45
camera(const vec3 &pos, const vec3 &up, const vec3 &dir)
Definition: camera.h:22
vec3 eye
Definition: camera.h:12
void newDelYaw(float angle_in_deg)
Definition: camera.h:32
void changeDir(vec3 dir)
Definition: camera.h:26
float speed
Definition: camera.h:16
void checkCorrectness()
Definition: camera.h:71
vec3 viewDir
Definition: camera.h:8
float FOV
Definition: camera.h:14
void DelRoll(float angle_in_deg)
Definition: camera.h:40
void correct()
Definition: camera.h:77
float sensitivity
Definition: camera.h:15
float farPoint
Definition: camera.h:13
camera()
Definition: camera.h:18
vec3 getUp() const
Definition: camera.h:67
constexpr float pi
Definition: maths.h:12
vec4_T< float > vec4
Definition: maths.h:439
constexpr float epsilon
Definition: maths.h:11
constexpr float radian
Definition: maths.h:10
vec3_T< float > vec3
Definition: maths.h:305
static float dot(const vec3_T< float > &a, const vec3_T< float > &b)
Definition: maths.h:301
static vec3_T< float > cross(const vec3_T< float > &a, const vec3_T< float > &b)
Definition: maths.h:293
vec3_T< T > normalize()
Definition: maths.h:278