7 glm::vec3 panningAimPos{ 0,0,0 };
11 float nearPlane = 0.1f;
16 eyePos = glm::vec3(0.f, 0.f, -770.0f);
17 aimPos = glm::vec3(0.f, 0.f, 0.f);
25 void init()
override {
26 aspect = (float)_screenWidth / (
float)_screenHeight;
27 _projectionMatrix = glm::perspective(glm::radians(fov), aspect, nearPlane, zFar);
28 updateCameraOrientation();
30 _cameraMatrix = glm::mat4(1.0f);
32 _cameraMatrix = _projectionMatrix * _viewMatrix;
36 void update()
override {
38 updateCameraOrientation();
40 _cameraMatrix = glm::mat4(1.0f);
42 _cameraMatrix = _projectionMatrix * _viewMatrix;
48 glm::vec3 getEulerAnglesFromDirection(glm::vec3 direction) {
49 float yaw = glm::atan(direction.x, direction.z);
50 float pitch = glm::asin(-direction.y);
53 return glm::vec3(glm::degrees(pitch), glm::degrees(yaw), glm::degrees(roll));
61 void setPanningAimPos(
const glm::vec3 newAimPos) {
62 panningAimPos = newAimPos;
65 glm::vec3 getPanningAimPos() {
71 glm::ivec2 getCameraDimensions()
const override {
72 glm::vec2 cameraDimensions = { _screenWidth, _screenHeight };
73 return cameraDimensions;
76 SDL_FRect getCameraRect()
const override {
77 float cameraWidth = getCameraDimensions().x / getScale();
78 float cameraHeight = getCameraDimensions().y / getScale();
80 float cameraX = eyePos.x - cameraWidth / 2.0f;
81 float cameraY = eyePos.y - cameraHeight / 2.0f;
83 SDL_FRect cameraRect = { cameraX , cameraY , cameraWidth, cameraHeight };
87 void setCameraMatrix(glm::mat4 newMatrix) {
90 void resetCameraPosition() {
94 eyePos = glm::vec3(0.f, 0.f, -770.0f);
95 aimPos = glm::vec3(0, 0, 0);
97 currentViewMode = ViewMode::Y_UP;
98 upDir = glm::vec3(0, -1, 0);
102 _cameraChange =
true;
104 float getMinScale() {
108 float getMaxScale() {
112 void setAspect(
float newAspectX,
float newAspectY)
114 aspect = newAspectX/ newAspectY;
115 _projectionMatrix = glm::perspective(
122 updateCameraOrientation();
124 _cameraMatrix = glm::mat4(1.0f);
126 _cameraMatrix = _projectionMatrix * _viewMatrix;
129 float _minScale = 0.1f, _maxScale = 5.0f;