-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTrackCamera.cpp
More file actions
27 lines (20 loc) · 790 Bytes
/
TrackCamera.cpp
File metadata and controls
27 lines (20 loc) · 790 Bytes
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
#include "TrackCamera.h"
#include "Quaternion.h"
#include <glm/gtc/matrix_transform.hpp>
glm::vec3 TrackCamera::GetPosition() const {
return CameraPosition;
}
void TrackCamera::UpdateRadius(float Delta) {
if (MinRadius <= Radius + Delta && Radius + Delta <= MaxRadius)
Radius += Delta;
}
void TrackCamera::RotateCamera(glm::vec3 Axis, float Angle) {
Quaternion q(Axis, Angle);
CameraPosition = q * CameraPosition * q.Conjugate();
up = q * up * q.Conjugate();
}
glm::mat4 TrackCamera::ToViewMatrix(glm::vec3 Object) const {
glm::vec3 Orientation = glm::normalize(CameraPosition - Object);
glm::vec3 CameraUp = glm::cross(Orientation, glm::normalize(glm::cross(up, Orientation)));
return glm::lookAt(CameraPosition * Radius, Object, CameraUp);
}