-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbasic_camera.h
89 lines (70 loc) · 1.99 KB
/
basic_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
//
// basic_camera.h
// test
//
// Created by Nazirul Hasan on 10/9/23.
//
#ifndef basic_camera_h
#define basic_camera_h
#include <glad/glad.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
class BasicCamera {
public:
glm::vec3 eye;
glm::vec3 lookAt;
glm::vec3 V;
BasicCamera(float eyeX = 0.0, float eyeY = 1.0, float eyeZ = 3.0, float lookAtX = 0.0, float lookAtY = 0.0, float lookAtZ = 0.0, glm::vec3 viewUpVector = glm::vec3(0.0f, 1.0f, 0.0f))
{
eye = glm::vec3(eyeX, eyeY, eyeZ);
lookAt = glm::vec3(lookAtX, lookAtY, lookAtZ);
V = viewUpVector;
}
glm::mat4 createViewMatrix()
{
glm::mat4 viewMatrix;
glm::vec3 N = eye - lookAt;
glm::vec3 U = glm::cross(V, N);
u = glm::normalize(U);
v = glm::normalize(glm::cross(N, U));
n = glm::normalize(N);
float dx = glm::dot(-eye, u);
float dy = glm::dot(-eye, v);
float dz = glm::dot(-eye, n);
viewMatrix[0].x = u.x; viewMatrix[1].x = u.y; viewMatrix[2].x = u.z; viewMatrix[3].x = dx;
viewMatrix[0].y = v.x; viewMatrix[1].y = v.y; viewMatrix[2].y = v.z; viewMatrix[3].y = dy;
viewMatrix[0].z = n.x; viewMatrix[1].z = n.y; viewMatrix[2].z = n.z; viewMatrix[3].z = dz;
viewMatrix[0].w = 0.0f; viewMatrix[1].w = 0.0f; viewMatrix[2].w = 0.0f; viewMatrix[3].w = 1.0f;
return viewMatrix;
}
void changeEye(float eyeX, float eyeY, float eyeZ)
{
eye = glm::vec3(eyeX, eyeY, eyeZ);
}
void changeLookAt(float lookAtX, float lookAtY, float lookAtZ)
{
lookAt = glm::vec3(lookAtX, lookAtY, lookAtZ);
}
void changeViewUpVector(glm::vec3 viewUpVector)
{
V = viewUpVector;
}
glm::vec3 get_u()
{
return u;
}
glm::vec3 get_v()
{
return v;
}
glm::vec3 get_n()
{
return n;
}
private:
glm::vec3 u;
glm::vec3 v;
glm::vec3 n;
};
#endif /* basic_camera_h */
#pragma once