Files
Nuake-custom/Nuake/src/Rendering/Camera.h
2023-08-03 18:56:30 -04:00

68 lines
1.4 KiB
C++

#pragma once
#include "src/Core/Timestep.h"
#include "src/Core/Maths.h"
#include "src/Resource/Serializable.h"
#include "Frustum.h"
#include <src/Rendering/AABB.h>
namespace Nuake
{
enum CAMERA_TYPE
{
ORTHO,
PERSPECTIVE
};
class EditorCamera;
class Camera : public ISerializable
{
private:
CAMERA_TYPE m_Type;
Frustum m_Frustum;
Vector3 Rotation = { 0.0f, 0.0f, 0.0f };
Vector3 Scale = { 1.0f, 1.0f, 1.0f };
Vector3 Up = Vector3(0, 1, 0);
Matrix4 m_Perspective;
Matrix4 m_View;
public:
float AspectRatio = 16.0f / 9.0f;
Vector3 Direction = Vector3(0, 0, 1);
Vector3 Right = Vector3(1, 0, 0);
Vector3 Translation = { 0.0f, 0.0f, 0.0f };
float Fov = 88.0f;
float Exposure = 1.0f;
float Gamma = 2.2f;
float Speed = 1.0f;
Camera();
Camera(CAMERA_TYPE type, Vector3 position);
void SetType(CAMERA_TYPE type);
void OnWindowResize(float x, float y);
void SetDirection(Vector3 direction);
void SetDirection(const Quat& direction);
Vector3 GetTranslation();
Vector3 GetDirection();
Matrix4 GetPerspective();
Matrix4 GetTransform();
Matrix4 GetTransformRotation();
void SetTransform(const Matrix4& transform);
inline Vector3 GetRight() const { return Right; }
inline Vector3 GetUp() const { return glm::cross(Direction, Right); }
bool BoxFrustumCheck(const AABB& aabb);
Frustum GetFrustum();
json Serialize() override;
bool Deserialize(const json& j) override;
friend EditorCamera;
};
}