From 7aef374f9b50e8a27abebf704f009e9cc18bd785 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Mon, 12 Dec 2022 16:03:47 +0800 Subject: [PATCH] Update and Implement camera class --- FinalProject/camera.cpp | 56 +++++++++++++++++++++++++++++++++++++++++ FinalProject/camera.h | 44 ++++++++++++++++---------------- 2 files changed, 79 insertions(+), 21 deletions(-) diff --git a/FinalProject/camera.cpp b/FinalProject/camera.cpp index 7aa211d..338c59e 100644 --- a/FinalProject/camera.cpp +++ b/FinalProject/camera.cpp @@ -3,3 +3,59 @@ #include #include "camera.h" + +// If no default input, set camera to (1, 1, 1) looking at (0, 0, 0) +Camera::Camera() : Camera(defaultOrigin(), defaultTarget()) {} + +Camera::Camera(glm::vec3 position, glm::vec3 target) : _position(position) { + updateCameraState(); +} + +Camera::Camera(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up) : + _position(position), _front(direction), _right(right), _up(up) +{ + updateCameraState(); +} + +inline glm::mat4 Camera::viewMatrix() { + return glm::lookAt(_position, _position + _front, _up); +} + +inline void Camera::move(glm::vec3 direction, float step) { + _position += direction * step; + updateCameraState(); +} + +inline void Camera::pitch(float deltaAngle) { + _pitch += deltaAngle; + updateCameraState(); +} + +inline void Camera::setPitch(float angle) { + _pitch = angle; + updateCameraState(); +} + +inline void Camera::yaw(float deltaAngle) { + _yaw += deltaAngle; + updateCameraState(); +} + +inline void Camera::setYaw(float angle) { + _yaw = angle; + updateCameraState(); +} + +inline void Camera::roll(float deltaAngle) { + _roll += deltaAngle; + updateCameraState(); +} + +inline void Camera::setRoll(float angle) { + _roll = angle; + updateCameraState(); +} + +void Camera::updateCameraState() { + // TODO: Implement vector update with roll pitch, and *roll* +} \ No newline at end of file diff --git a/FinalProject/camera.h b/FinalProject/camera.h index aef1ef3..408e902 100644 --- a/FinalProject/camera.h +++ b/FinalProject/camera.h @@ -3,44 +3,46 @@ #include class Camera { +public: + inline glm::vec3 defaultOrigin() { return glm::vec3(1.0f, 1.0f, 1.0f); } + inline glm::vec3 defaultTarget() { return glm::vec3(0.0f, 0.0f, 0.0f); } + private: // Camera state glm::vec3 _position; glm::vec3 _right; glm::vec3 _front; glm::vec3 _up; - float _yawRad; - float _pitchRad; - float _rollRad; - float _zoom; + float _yaw = 0.0f; + float _pitch = 0.0f; + float _roll = 0.0f; + float _zoom = 1.0f; -//private: -// // Camera settings -// float _moveStep; -// float _yawStep; -// float _pitchStep; -// float _rollStep; +private: + // Camera settings + float _moveStep = 1.0f; private: // World settings - glm::vec3 _worldUp; + glm::vec3 _worldUp = glm::vec3(0.0f, 1.0f, 0.0f); public: Camera(); - Camera(glm::vec3 position, glm::vec3 lookat); + Camera(glm::vec3 position, glm::vec3 target); Camera(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up); - ~Camera(); public: inline glm::mat4 viewMatrix(); public: - void move(glm::vec3 deltaVec); - void setPosition(glm::vec3 position); - void pitch(float deltaPitch); - void setPitch(float pitch); - void yaw(float deltaRad); - void setYaw(float yaw); - void roll(float deltaRad); - void setRoll(float roll); + inline void move(glm::vec3 direction, float step); + inline void pitch(float deltaAngle); + inline void setPitch(float angle); + inline void yaw(float deltaAngle); + inline void setYaw(float angle); + inline void roll(float deltaAngle); + inline void setRoll(float angle); + +private: + void updateCameraState(); };