Update Camera class

- remove roll
- add constructor (position, yaw, pitch)
- add API setPosition(pos)
- set default zoom to 90
This commit is contained in:
Linloir 2022-12-13 13:52:15 +08:00
parent a49f215928
commit f5f2247274
No known key found for this signature in database
GPG Key ID: 58EEB209A0F2C366
2 changed files with 39 additions and 16 deletions

View File

@ -8,15 +8,42 @@
Camera::Camera() : Camera(defaultOrigin(), defaultTarget()) {}
Camera::Camera(glm::vec3 position, glm::vec3 target) : _position(position) {
updateCameraState();
glm::vec3 direction = glm::normalize(target - position);
glm::vec3 right = glm::normalize(glm::cross(direction, _worldUp));
glm::vec3 up = glm::normalize(glm::cross(right, direction));
_right = right;
_front = direction;
_up = up;
_yaw = glm::degrees(glm::atan(direction.z, direction.x));
_pitch = glm::degrees(glm::asin(direction.y));
}
Camera::Camera(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up) :
_position(position), _front(direction), _right(right), _up(up)
{
_yaw = glm::degrees(glm::atan(direction.z, direction.x));
_pitch = glm::degrees(glm::asin(direction.y));
}
Camera::Camera(glm::vec3 position, float yaw, float pitch) :
_position(position), _yaw(yaw), _pitch(pitch)
{
updateCameraState();
}
void Camera::updateCameraState() {
// TODO: Implement vector update with roll pitch, and *roll*
// Update front vector
glm::vec3 front;
front.x = cos(glm::radians(_yaw)) * cos(glm::radians(_pitch));
front.y = sin(glm::radians(_pitch));
front.z = sin(glm::radians(_yaw)) * cos(glm::radians(_pitch));
_front = glm::normalize(front);
// Update right vector
_right = glm::normalize(glm::cross(_front, _worldUp));
// Update up vector
_up = glm::normalize(glm::cross(_right, _front));
}

View File

@ -1,6 +1,7 @@
#pragma once
#include <GLM/glm.hpp>
#include <GLM/ext/matrix_transform.hpp>
class Camera {
public:
@ -15,8 +16,7 @@ private:
glm::vec3 _up;
float _yaw = 0.0f;
float _pitch = 0.0f;
float _roll = 0.0f;
float _zoom = 1.0f;
float _zoom = 90.0f;
private:
// Camera settings
@ -30,18 +30,19 @@ public:
Camera();
Camera(glm::vec3 position, glm::vec3 target);
Camera(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up);
Camera(glm::vec3 position, float yaw, float pitch);
public:
inline float zoom() const { return _zoom; }
inline glm::mat4 viewMatrix();
public:
inline void move(glm::vec3 direction, float step);
inline void setPosition(glm::vec3 position);
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();
@ -56,6 +57,11 @@ inline void Camera::move(glm::vec3 direction, float step) {
updateCameraState();
}
inline void Camera::setPosition(glm::vec3 position) {
_position = position;
updateCameraState();
}
inline void Camera::pitch(float deltaAngle) {
_pitch += deltaAngle;
updateCameraState();
@ -75,13 +81,3 @@ 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();
}