85 lines
2.1 KiB
C++
85 lines
2.1 KiB
C++
#ifndef CCAMERA_H
|
|
#define CCAMERA_H
|
|
|
|
#include "CFrustumPlanes.h"
|
|
#include <Common/CAABox.h>
|
|
#include <Common/CMatrix4f.h>
|
|
#include <Common/CRay.h>
|
|
#include <Common/CVector2i.h>
|
|
#include <Common/CVector3f.h>
|
|
#include <Common/types.h>
|
|
#include <Common/EKeyInputs.h>
|
|
#include <Common/EMouseInputs.h>
|
|
|
|
enum ECameraMoveMode
|
|
{
|
|
eFreeCamera, eOrbitCamera
|
|
};
|
|
|
|
class CCamera
|
|
{
|
|
ECameraMoveMode mMode;
|
|
CVector3f mPosition;
|
|
CVector3f mDirection;
|
|
float mAspectRatio;
|
|
|
|
float mYaw;
|
|
float mPitch;
|
|
CVector3f mOrbitTarget;
|
|
float mMoveSpeed;
|
|
float mLookSpeed;
|
|
|
|
CMatrix4f mCachedViewMatrix;
|
|
CMatrix4f mCachedProjectionMatrix;
|
|
CFrustumPlanes mCachedFrustumPlanes;
|
|
bool mViewOutdated;
|
|
bool mProjectionOutdated;
|
|
bool mFrustumPlanesOutdated;
|
|
|
|
public:
|
|
CCamera();
|
|
CCamera(CVector3f Position, CVector3f Target);
|
|
|
|
void Pan(float XAmount, float YAmount);
|
|
void Rotate(float XAmount, float YAmount);
|
|
void Zoom(float Amount);
|
|
void Snap(CVector3f Position);
|
|
void ProcessKeyInput(EKeyInputs KeyFlags, double DeltaTime);
|
|
void ProcessMouseInput(EKeyInputs KeyFlags, EMouseInputs MouseFlags, float XMovement, float YMovement);
|
|
CRay CastRay(CVector2f DeviceCoords);
|
|
void LoadMatrices();
|
|
void LoadRotationOnlyMatrices();
|
|
|
|
// Getters
|
|
CVector3f Position() const;
|
|
CVector3f Direction() const;
|
|
float Yaw() const;
|
|
float Pitch() const;
|
|
float FieldOfView() const;
|
|
const CMatrix4f& ViewMatrix();
|
|
CMatrix4f RotationOnlyViewMatrix();
|
|
const CMatrix4f& ProjectionMatrix();
|
|
const CFrustumPlanes& FrustumPlanes();
|
|
|
|
// Setters
|
|
void SetPosition(CVector3f Position);
|
|
void SetDirection(CVector3f Direction);
|
|
void SetYaw(float Yaw);
|
|
void SetPitch(float Pitch);
|
|
void SetMoveSpeed(float MoveSpeed);
|
|
void SetLookSpeed(float LookSpeed);
|
|
void SetFree();
|
|
void SetOrbit(const CVector3f& OrbitTarget);
|
|
void SetOrbit(const CAABox& OrbitTarget);
|
|
void SetAspectRatio(float AspectRatio);
|
|
|
|
// Private
|
|
private:
|
|
void CalculateDirection();
|
|
void CalculateView();
|
|
void CalculateProjection();
|
|
void CalculateFrustumPlanes();
|
|
};
|
|
|
|
#endif // CCAMERA_H
|