Update and Implement camera class

This commit is contained in:
Linloir 2022-12-12 16:03:47 +08:00
parent fc1eecde09
commit 7aef374f9b
No known key found for this signature in database
GPG Key ID: 58EEB209A0F2C366
2 changed files with 79 additions and 21 deletions

View File

@ -3,3 +3,59 @@
#include <GLM/ext/matrix_transform.hpp>
#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*
}

View File

@ -3,44 +3,46 @@
#include <GLM/glm.hpp>
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();
};