From 45847828b5eecfabd0901005b554e37a56a291a4 Mon Sep 17 00:00:00 2001 From: 4VRDriver <44267643+4VRDriver@users.noreply.github.com> Date: Fri, 4 Sep 2020 07:28:51 +0200 Subject: [PATCH] Move camera to Controller class --- Controller.cpp | 40 +++++++++++++++++++++------------------- Controller.h | 4 ++++ EventHandler.cpp | 4 +--- defines.h | 4 ++-- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/Controller.cpp b/Controller.cpp index 2b16913..95036a3 100644 --- a/Controller.cpp +++ b/Controller.cpp @@ -13,7 +13,6 @@ #endif #include "Controller.h" -#include "Camera.h" #include "Texture.h" Controller::Controller() { @@ -30,6 +29,7 @@ Controller::Controller() { gameWindow = new Window(); gameEventHandler = new EventHandler(gameWindow->getGLFWwindow()); + camera = new Camera(90.0f, gameWindow->getWindowWidth(), gameWindow->getWindowHeight()); } Controller::~Controller() { @@ -72,9 +72,8 @@ void Controller::run() { Texture tex1("res/tex.png", shaderProgram.getShaderProgramId()); glm::mat4 model = glm::mat4(1.0f); - Camera cam1(90.0f, gameWindow->getWindowWidth(), gameWindow->getWindowHeight()); - cam1.translate(glm::vec3(0.0f, 0.0f, 2.5f)); + camera->translate(glm::vec3(0.0f, 0.0f, 2.5f)); // This is the game loop while(!glfwWindowShouldClose(gameWindow->getGLFWwindow())) { @@ -93,10 +92,10 @@ void Controller::run() { // ... model = glm::rotate(model, (float)(this->deltaTime*0.0005), glm::vec3(0.0f, 1.0f, 0.0f)); - cam1.lookAtTarget(glm::vec3(0.0f, 0.0f, 0.0f)); - cam1.lookForward(); - cam1.updateVPM(); - glm::mat4 modelViewProj = cam1.getViewProj() * model; + camera->lookAtTarget(glm::vec3(0.0f, 0.0f, 0.0f)); + camera->lookForward(); + camera->updateVPM(); + glm::mat4 modelViewProj = camera->getViewProj() * model; shaderProgram.setUniform("u_modelViewProj", modelViewProj); // Render and buffer swap @@ -107,8 +106,8 @@ void Controller::run() { for(int i=0;i<20;i++) { glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_INT, 0); model = glm::translate(model, glm::vec3(0.0f, 0.0f, 1.0f)); - cam1.updateVPM(); - glm::mat4 modelViewProj = cam1.getViewProj() * model; + camera->updateVPM(); + glm::mat4 modelViewProj = camera->getViewProj() * model; shaderProgram.setUniform("u_modelViewProj", modelViewProj); } model = glm::translate(model, glm::vec3(0.0f, 0.0f, -20.0f)); @@ -119,18 +118,12 @@ void Controller::run() { // Check events, handle input gameEventHandler->handleEvents(); - cam1.updatePositionFromKeyboardInput(gameEventHandler->getCameraActionRegister(), deltaTime); - cam1.updateDirectionFromMouseInput(gameEventHandler->getCursorDeltaX(), gameEventHandler->getCursorDeltaY()); + camera->updatePositionFromKeyboardInput(gameEventHandler->getCameraActionRegister(), deltaTime); + camera->updateDirectionFromMouseInput(gameEventHandler->getCursorDeltaX(), gameEventHandler->getCursorDeltaY()); // Update window size - if(gameWindow->getWindowWasResized()) { - int new_window_width, new_window_height; - glfwGetFramebufferSize(gameWindow->getGLFWwindow(), &new_window_width, &new_window_height); - gameWindow->setWindowDimensions(new_window_width, new_window_height); - glViewport(0, 0, new_window_width, new_window_height); - cam1.updateAspectRatio(new_window_width, new_window_height); - gameEventHandler->setFirstMouseInput(1); - } + if(gameWindow->getWindowWasResized()) + updateWindowSize(); } } @@ -161,3 +154,12 @@ void Controller::error_callback(int error, const char* description) { (void)error; fprintf(stderr, "Error: %s\n", description); } + +void Controller::updateWindowSize() { + int new_window_width, new_window_height; + glfwGetFramebufferSize(gameWindow->getGLFWwindow(), &new_window_width, &new_window_height); + gameWindow->setWindowDimensions(new_window_width, new_window_height); + glViewport(0, 0, new_window_width, new_window_height); + camera->updateAspectRatio(new_window_width, new_window_height); + gameEventHandler->setFirstMouseInput(1); +} diff --git a/Controller.h b/Controller.h index 82c559c..7a7e28d 100644 --- a/Controller.h +++ b/Controller.h @@ -4,6 +4,7 @@ #include "Window.h" #include "EventHandler.h" +#include "Camera.h" #include "ShaderProgram.h" #include "VertexBuffer.h" #include "defines.h" @@ -22,8 +23,11 @@ private: void limit_framerate(); + void updateWindowSize(); + Window *gameWindow; EventHandler *gameEventHandler; + Camera *camera; const uint16_t MAX_FPS = 60; double deltaTime; diff --git a/EventHandler.cpp b/EventHandler.cpp index cb31191..1dfa3c8 100644 --- a/EventHandler.cpp +++ b/EventHandler.cpp @@ -14,10 +14,8 @@ EventHandler::EventHandler(GLFWwindow *window) void EventHandler::handleEvents() { - // Restore deltaCursorPos BEFORE polling events - //deltaCursorPosX = 0.0f; deltaCursorPosY = 0.0f; - glfwPollEvents(); + for(int i=0; i