From 95162bf637d16724290a4bedf99988f5f4509a11 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Mon, 13 Nov 2023 17:02:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BA=D0=B0=D0=BC=D0=B5=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/Camera.h | 8 ++++---- src/Camera.cpp | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/Camera.h b/include/Camera.h index 2af7602..53d4663 100644 --- a/include/Camera.h +++ b/include/Camera.h @@ -38,8 +38,8 @@ struct CameraData class Camera : public Node { public: - Camera(float aspect, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION, float fovy = CAMERA_FOVy); // Конструктор камеры с проекцией перспективы - Camera(float width, float height, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION); // Конструктор ортографической камеры + Camera(float aspect, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION, float fovy = CAMERA_FOVy, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Конструктор камеры с проекцией перспективы + Camera(float width, float height, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Конструктор ортографической камеры Camera(const Camera& copy); // Конструктор копирования камеры Camera& operator=(const Camera& other); // Оператор присваивания virtual ~Camera(); // Деструктор @@ -50,8 +50,8 @@ class Camera : public Node void rotate(const glm::vec2 &xyOffset); // Поворачивает камеру на dx и dy пикселей с учетом чувствительности - void setPerspective(float fov, float aspect); // Устанавливает заданную матрицу перспективы - void setOrtho(float width, float height); // Устанавливает заданную ортографическую матрицу + void setPerspective(float fov, float aspect, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Устанавливает заданную матрицу перспективы + void setOrtho(float width, float height, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Устанавливает заданную ортографическую матрицу void setSensitivity(float sensitivity); // Изменяет чувствительность мыши const float& getSensitivity() const; // Возвращает чувствительность мыши diff --git a/src/Camera.cpp b/src/Camera.cpp index b2434bd..1493338 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -21,17 +21,17 @@ Camera::Camera(const glm::vec3 &pos, const glm::vec3 &initialRotation) : Node(NU } // Конструктор камеры с проекцией перспективы -Camera::Camera(float aspect, const glm::vec3 &position, const glm::vec3 &initialRotation, float fovy) +Camera::Camera(float aspect, const glm::vec3 &position, const glm::vec3 &initialRotation, float fovy, float near, float far) : Camera(position, initialRotation) { - setPerspective(fovy, aspect); + setPerspective(fovy, aspect, near, far); } // Конструктор ортографической камеры -Camera::Camera(float width, float height, const glm::vec3 &position, const glm::vec3 &initialRotation) +Camera::Camera(float width, float height, const glm::vec3 &position, const glm::vec3 &initialRotation, float near, float far) : Camera(position, initialRotation) { - setOrtho(width, height); + setOrtho(width, height, near, far); } // Конструктор копирования камеры @@ -90,19 +90,19 @@ const glm::mat4& Camera::getVP() } // Устанавливает заданную матрицу перспективы -void Camera::setPerspective(float fovy, float aspect) +void Camera::setPerspective(float fovy, float aspect, float near, float far) { - projection = glm::perspective(glm::radians(fovy), aspect, CAMERA_NEAR, CAMERA_FAR); + projection = glm::perspective(glm::radians(fovy), aspect, near, far); requiredRecalcVP = true; for (int cascade = 0; cascade < CAMERA_CASCADE_COUNT; cascade++) cascade_proj[cascade] = glm::perspective(glm::radians(fovy), aspect, camera_cascade_distances[cascade], camera_cascade_distances[cascade+1]); } // Устанавливает заданную ортографическую матрицу -void Camera::setOrtho(float width, float height) +void Camera::setOrtho(float width, float height, float near, float far) { const float aspect = width / height; - projection = glm::ortho(-1.0f, 1.0f, -1.0f/aspect, 1.0f/aspect, CAMERA_NEAR, CAMERA_FAR); + projection = glm::ortho(-1.0f, 1.0f, -1.0f/aspect, 1.0f/aspect, near, far); requiredRecalcVP = true; for (int cascade = 0; cascade < CAMERA_CASCADE_COUNT; cascade++) cascade_proj[cascade] = glm::ortho(-1.0f, 1.0f, -1.0f/aspect, 1.0f/aspect, camera_cascade_distances[cascade], camera_cascade_distances[cascade+1]);