68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <QVector3D>
|
|
#include <QMatrix4x4>
|
|
#include <QtMath>
|
|
#include <QOpenGLFunctions_4_5_Compatibility>
|
|
|
|
// Default camera values
|
|
const float YAW = -90.0f;
|
|
const float PITCH = 0.0f;
|
|
const float SPEED = 200.f;
|
|
const float SENSITIVITY = 0.1f;
|
|
const float ZOOM = 45.0f;
|
|
|
|
// Defines several possible options for camera movement. Used as abstraction to stay away from window-system specific input methods
|
|
enum Camera_Movement {
|
|
FORWARD,
|
|
BACKWARD,
|
|
LEFT,
|
|
RIGHT,
|
|
UP,
|
|
DOWN
|
|
};
|
|
|
|
class Camera
|
|
{
|
|
|
|
public:
|
|
// camera Attributes
|
|
QVector3D Position;
|
|
QVector3D Front;
|
|
QVector3D Up;
|
|
QVector3D Right;
|
|
QVector3D WorldUp;
|
|
QVector3D PositionFront;
|
|
QVector3D PositionRight;
|
|
// euler Angles, ½Ç¶ÈÖÆ
|
|
float Yaw;
|
|
float Pitch;
|
|
// camera options
|
|
float MovementSpeed;
|
|
float MouseSensitivity;
|
|
float Zoom;
|
|
|
|
// constructor with vectors
|
|
Camera(QVector3D position = QVector3D(0.0f, 0.0f, 0.0f), QVector3D up = QVector3D(0.0f, 1.0f, 0.0f), float yaw = YAW, float pitch = PITCH);
|
|
|
|
// constructor with scalar values
|
|
Camera(float posX, float posY, float posZ, float upX, float upY, float upZ, float yaw, float pitch);
|
|
|
|
// returns the view matrix calculated using Euler Angles and the LookAt Matrix
|
|
QMatrix4x4 GetViewMatrix();
|
|
|
|
// processes input received from any keyboard-like input system. Accepts input parameter in the form of camera defined ENUM (to abstract it from windowing systems)
|
|
void ProcessKeyboard(Camera_Movement direction, float deltaTime);
|
|
|
|
// processes input received from a mouse input system. Expects the offset value in both the x and y direction.
|
|
void ProcessMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch = true);
|
|
|
|
// processes input received from a mouse scroll-wheel event. Only requires input on the vertical wheel-axis
|
|
void ProcessMouseScroll(float yoffset);
|
|
|
|
private:
|
|
// calculates the front vector from the Camera's (updated) Euler Angles
|
|
void updateCameraVectors();
|
|
};
|
|
|