From 468cbdcfdaa1cc8974dae539cc577fd5f80665ba Mon Sep 17 00:00:00 2001 From: Yuki Nishidate Date: Sun, 8 Sep 2024 21:46:14 +0900 Subject: [PATCH] add scale to camera --- include/reactive/Scene/Camera.hpp | 3 +++ src/Scene/Camera.cpp | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/reactive/Scene/Camera.hpp b/include/reactive/Scene/Camera.hpp index a3f55ac..5432806 100644 --- a/include/reactive/Scene/Camera.hpp +++ b/include/reactive/Scene/Camera.hpp @@ -85,6 +85,8 @@ class Camera { } } + void setScale(float _scale) { scale = _scale; } + protected: Type type = Type::Orbital; @@ -95,6 +97,7 @@ class Camera { float zNear = 0.1f; float zFar = 1000.0f; float fovY = glm::radians(45.0f); + float scale = 1.0f; std::variant params = OrbitalParams{}; }; diff --git a/src/Scene/Camera.cpp b/src/Scene/Camera.cpp index 4e19841..140dca8 100644 --- a/src/Scene/Camera.cpp +++ b/src/Scene/Camera.cpp @@ -69,7 +69,7 @@ auto Camera::getView() const -> glm::mat4 { } auto Camera::getProj() const -> glm::mat4 { - return glm::perspective(fovY, aspect, zNear, zFar); + return glm::perspective(fovY, aspect, zNear * scale, zFar * scale); } auto Camera::getInvView() const -> glm::mat4 { @@ -83,12 +83,14 @@ auto Camera::getInvProj() const -> glm::mat4 { auto Camera::getPosition() const -> glm::vec3 { if (type == Type::FirstPerson) { auto& _params = std::get(params); - return _params.position; + return _params.position * scale; } else { auto& _params = std::get(params); glm::mat4 rotX = glm::rotate(eulerRotation.x, glm::vec3(1, 0, 0)); glm::mat4 rotY = glm::rotate(eulerRotation.y, glm::vec3(0, 1, 0)); - return _params.target + glm::vec3{rotY * rotX * glm::vec4{0, 0, _params.distance, 1}}; + glm::vec3 position = + _params.target + glm::vec3{rotY * rotX * glm::vec4{0, 0, _params.distance, 1}}; + return position * scale; } }