NcEngine
Camera.h
1#pragma once
2
4
5#include "ncmath/Geometry.h"
6
7#include "DirectXMath.h"
8
9namespace nc
10{
13{
15 static constexpr auto DefaultFOV = 1.0472f;
16 static constexpr auto DefaultNearClip = 0.1f;
17 static constexpr auto DefaultFarClip = 400.0f;
18
20 float fov = DefaultFOV;
21
24
27};
28
31{
32 Vector3 nearPoint = Vector3::Zero();
33 Vector3 farPoint = Vector3::Zero();
34};
35
37auto MakeDefaultViewMatrix() -> DirectX::XMMATRIX;
38
40auto MakeDefaultProjectionMatrix() -> DirectX::XMMATRIX;
41
43class Camera : public FreeComponent
44{
45 public:
51 Camera(Entity self, const CameraProperties& properties = {}) noexcept;
52
57 auto ViewMatrix() const noexcept -> DirectX::FXMMATRIX { return m_view; }
58
63 auto ProjectionMatrix() const noexcept -> DirectX::FXMMATRIX { return m_projection; }
64
69 auto InverseProjectionMatrix() const noexcept -> DirectX::FXMMATRIX { return m_inverseProjection; }
70
72 auto CastToNearAndFarPlanes(const Vector2& normalizedDeviceCoords) const -> NearFarPoints;
73
75 auto GetProperties() const -> const CameraProperties& { return m_properties; };
76
81 auto CalculateFrustum() const noexcept -> Frustum;
82
84 virtual void UpdateViewMatrix(DirectX::FXMMATRIX transformationMatrix);
85
91 virtual void UpdateProjectionMatrix(float width, float height);
92
97 virtual void EnableUpdate() noexcept {}
98
103 virtual void DisableUpdate() noexcept {}
104
105 private:
106 DirectX::XMMATRIX m_view;
107 DirectX::XMMATRIX m_projection;
108 DirectX::XMMATRIX m_inverseProjection;
109 CameraProperties m_properties;
110};
111} // namespace nc
Basic camera component.
Definition: Camera.h:44
Camera(Entity self, const CameraProperties &properties={}) noexcept
Construct a new Camera object.
virtual void EnableUpdate() noexcept
Enable execution of the Run() method in thhe derived class.
Definition: Camera.h:97
auto InverseProjectionMatrix() const noexcept -> DirectX::FXMMATRIX
Get the camera's inverse projection matrix.
Definition: Camera.h:69
auto ProjectionMatrix() const noexcept -> DirectX::FXMMATRIX
Get the camera's projection matrix.
Definition: Camera.h:63
auto GetProperties() const -> const CameraProperties &
Get the camera properties.
Definition: Camera.h:75
auto CalculateFrustum() const noexcept -> Frustum
Calculate the camera's viewport.
auto ViewMatrix() const noexcept -> DirectX::FXMMATRIX
Get the camera's view matrix.
Definition: Camera.h:57
virtual void DisableUpdate() noexcept
Disable execution of the Run() method in the derived class.
Definition: Camera.h:103
auto CastToNearAndFarPlanes(const Vector2 &normalizedDeviceCoords) const -> NearFarPoints
Unproject 2D normalized device coordinates into 3D points on the near and far planes.
virtual void UpdateViewMatrix(DirectX::FXMMATRIX transformationMatrix)
Construct a new view matrix based on the current transform.
virtual void UpdateProjectionMatrix(float width, float height)
Construct a new projection matrix based on input values.
Identifies an object in the registry.
Definition: Entity.h:18
Base class for free components.
Definition: Component.h:51
Properties for controlling a camera's frustum.
Definition: Camera.h:13
static constexpr auto DefaultFOV
Camera field of view in radians.
Definition: Camera.h:15
static constexpr auto DefaultNearClip
Camera field of view in radians.
Definition: Camera.h:16
float fov
Camera field of view in radians.
Definition: Camera.h:20
static constexpr auto DefaultFarClip
Camera field of view in radians.
Definition: Camera.h:17
float nearClip
Distance to near clipping plane. Must be greater than 0.
Definition: Camera.h:23
float farClip
Distance to far clipping plane. Must be greater than nearClip.
Definition: Camera.h:26
Definition: Geometry.h:52
Two points lying on a Camera's near and far planes.
Definition: Camera.h:31
A two component vector.
Definition: Vector.h:13
A three component vector.
Definition: Vector.h:29