mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-17 15:38:11 +08:00
Update and Implement camera class
This commit is contained in:
parent
fc1eecde09
commit
7aef374f9b
@ -3,3 +3,59 @@
|
|||||||
#include <GLM/ext/matrix_transform.hpp>
|
#include <GLM/ext/matrix_transform.hpp>
|
||||||
|
|
||||||
#include "camera.h"
|
#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*
|
||||||
|
}
|
||||||
@ -3,44 +3,46 @@
|
|||||||
#include <GLM/glm.hpp>
|
#include <GLM/glm.hpp>
|
||||||
|
|
||||||
class Camera {
|
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:
|
private:
|
||||||
// Camera state
|
// Camera state
|
||||||
glm::vec3 _position;
|
glm::vec3 _position;
|
||||||
glm::vec3 _right;
|
glm::vec3 _right;
|
||||||
glm::vec3 _front;
|
glm::vec3 _front;
|
||||||
glm::vec3 _up;
|
glm::vec3 _up;
|
||||||
float _yawRad;
|
float _yaw = 0.0f;
|
||||||
float _pitchRad;
|
float _pitch = 0.0f;
|
||||||
float _rollRad;
|
float _roll = 0.0f;
|
||||||
float _zoom;
|
float _zoom = 1.0f;
|
||||||
|
|
||||||
//private:
|
private:
|
||||||
// // Camera settings
|
// Camera settings
|
||||||
// float _moveStep;
|
float _moveStep = 1.0f;
|
||||||
// float _yawStep;
|
|
||||||
// float _pitchStep;
|
|
||||||
// float _rollStep;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// World settings
|
// World settings
|
||||||
glm::vec3 _worldUp;
|
glm::vec3 _worldUp = glm::vec3(0.0f, 1.0f, 0.0f);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Camera();
|
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(glm::vec3 position, glm::vec3 direction, glm::vec3 right, glm::vec3 up);
|
||||||
~Camera();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
inline glm::mat4 viewMatrix();
|
inline glm::mat4 viewMatrix();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void move(glm::vec3 deltaVec);
|
inline void move(glm::vec3 direction, float step);
|
||||||
void setPosition(glm::vec3 position);
|
inline void pitch(float deltaAngle);
|
||||||
void pitch(float deltaPitch);
|
inline void setPitch(float angle);
|
||||||
void setPitch(float pitch);
|
inline void yaw(float deltaAngle);
|
||||||
void yaw(float deltaRad);
|
inline void setYaw(float angle);
|
||||||
void setYaw(float yaw);
|
inline void roll(float deltaAngle);
|
||||||
void roll(float deltaRad);
|
inline void setRoll(float angle);
|
||||||
void setRoll(float roll);
|
|
||||||
|
private:
|
||||||
|
void updateCameraState();
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user