mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-17 15:38:11 +08:00
Update Camera class
- remove roll - add constructor (position, yaw, pitch) - add API setPosition(pos) - set default zoom to 90
This commit is contained in:
parent
a49f215928
commit
f5f2247274
@ -8,15 +8,42 @@
|
|||||||
Camera::Camera() : Camera(defaultOrigin(), defaultTarget()) {}
|
Camera::Camera() : Camera(defaultOrigin(), defaultTarget()) {}
|
||||||
|
|
||||||
Camera::Camera(glm::vec3 position, glm::vec3 target) : _position(position) {
|
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) :
|
Camera::Camera(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up) :
|
||||||
_position(position), _front(direction), _right(right), _up(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();
|
updateCameraState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::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));
|
||||||
}
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <GLM/glm.hpp>
|
#include <GLM/glm.hpp>
|
||||||
|
#include <GLM/ext/matrix_transform.hpp>
|
||||||
|
|
||||||
class Camera {
|
class Camera {
|
||||||
public:
|
public:
|
||||||
@ -15,8 +16,7 @@ private:
|
|||||||
glm::vec3 _up;
|
glm::vec3 _up;
|
||||||
float _yaw = 0.0f;
|
float _yaw = 0.0f;
|
||||||
float _pitch = 0.0f;
|
float _pitch = 0.0f;
|
||||||
float _roll = 0.0f;
|
float _zoom = 90.0f;
|
||||||
float _zoom = 1.0f;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Camera settings
|
// Camera settings
|
||||||
@ -30,18 +30,19 @@ public:
|
|||||||
Camera();
|
Camera();
|
||||||
Camera(glm::vec3 position, glm::vec3 target);
|
Camera(glm::vec3 position, glm::vec3 target);
|
||||||
Camera(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up);
|
Camera(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up);
|
||||||
|
Camera(glm::vec3 position, float yaw, float pitch);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
inline float zoom() const { return _zoom; }
|
||||||
inline glm::mat4 viewMatrix();
|
inline glm::mat4 viewMatrix();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
inline void move(glm::vec3 direction, float step);
|
inline void move(glm::vec3 direction, float step);
|
||||||
|
inline void setPosition(glm::vec3 position);
|
||||||
inline void pitch(float deltaAngle);
|
inline void pitch(float deltaAngle);
|
||||||
inline void setPitch(float angle);
|
inline void setPitch(float angle);
|
||||||
inline void yaw(float deltaAngle);
|
inline void yaw(float deltaAngle);
|
||||||
inline void setYaw(float angle);
|
inline void setYaw(float angle);
|
||||||
inline void roll(float deltaAngle);
|
|
||||||
inline void setRoll(float angle);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateCameraState();
|
void updateCameraState();
|
||||||
@ -56,6 +57,11 @@ inline void Camera::move(glm::vec3 direction, float step) {
|
|||||||
updateCameraState();
|
updateCameraState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void Camera::setPosition(glm::vec3 position) {
|
||||||
|
_position = position;
|
||||||
|
updateCameraState();
|
||||||
|
}
|
||||||
|
|
||||||
inline void Camera::pitch(float deltaAngle) {
|
inline void Camera::pitch(float deltaAngle) {
|
||||||
_pitch += deltaAngle;
|
_pitch += deltaAngle;
|
||||||
updateCameraState();
|
updateCameraState();
|
||||||
@ -75,13 +81,3 @@ inline void Camera::setYaw(float angle) {
|
|||||||
_yaw = angle;
|
_yaw = angle;
|
||||||
updateCameraState();
|
updateCameraState();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Camera::roll(float deltaAngle) {
|
|
||||||
_roll += deltaAngle;
|
|
||||||
updateCameraState();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Camera::setRoll(float angle) {
|
|
||||||
_roll = angle;
|
|
||||||
updateCameraState();
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user