Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Camera.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2018 DIVIDE-Studio
3 Copyright (c) 2009 Ionut Cava
4
5 This file is part of DIVIDE Framework.
6
7 Permission is hereby granted, free of charge, to any person obtaining a copy
8 of this software
9 and associated documentation files (the "Software"), to deal in the Software
10 without restriction,
11 including without limitation the rights to use, copy, modify, merge, publish,
12 distribute, sublicense,
13 and/or sell copies of the Software, and to permit persons to whom the
14 Software is furnished to do so,
15 subject to the following conditions:
16
17 The above copyright notice and this permission notice shall be included in
18 all copies or substantial portions of the Software.
19
20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 IMPLIED,
22 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
23 PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25 DAMAGES OR OTHER LIABILITY,
26 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
27 IN CONNECTION WITH THE SOFTWARE
28 OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
30 */
31
32#pragma once
33#ifndef DVD_CAMERA_H_
34#define DVD_CAMERA_H_
35
36#include "CameraSnapshot.h"
37#include "Frustum.h"
38
40
41namespace Divide
42{
43 enum class FStops : U8
44 {
45 F_1_4,
46 F_1_8,
47 F_2_0,
48 F_2_8,
49 F_3_5,
50 F_4_0,
51 F_5_6,
52 F_8_0,
53 F_11_0,
54 F_16_0,
55 F_22_0,
56 F_32_0,
57 COUNT
58 };
59
60 namespace Names
61 {
62 static const char* fStops[] = {
63 "f/1.4", "f/1.8", "f/2", "f/2.8", "f/3.5", "f/4", "f/5.6", "f/8", "f/11", "f/16", "f/22", "f/32", "NONE"
64 };
65 }
66 static_assert(ArrayCount( Names::fStops ) == to_base( FStops::COUNT ) + 1, "Camera::FStops name array out of sync!");
67
69 {
70 1.4f, 1.8f, 2.0f, 2.8f, 3.5f, 4.0f, 5.6f, 8.0f, 11.0f, 16.0f, 22.0f, 32.0f
71 };
72
73 namespace TypeUtil
74 {
75 [[nodiscard]] const char* FStopsToString( FStops stop ) noexcept;
76 [[nodiscard]] FStops StringToFStops( const string& name );
77 };
78
81
82 class GFXDevice;
84
85 struct CameraEntry;
87
88 class Camera final : public Resource
89 {
90 public:
91 static constexpr F32 DEFAULT_CAMERA_MOVE_SPEED = 20.f;
92 static constexpr F32 DEFAULT_CAMERA_TURN_SPEED = 20.f;
93 static constexpr F32 MAX_CAMERA_MOVE_SPEED = 20.f;
94 static constexpr F32 MAX_CAMERA_TURN_SPEED = 20.f;
95 static constexpr F32 s_minNearZ = 0.1f;
96
97 enum class Mode : U8
98 {
99 FREE_FLY = 0,
100 STATIC,
103 ORBIT,
104 SCRIPTED,
105 COUNT
106 };
107
108 enum class UtilityCamera : U8
109 {
110 _2D = 0,
112 DEFAULT,
113 CUBE,
115 COUNT
116 };
117
118 public:
119 explicit Camera( const std::string_view name, Mode mode, const vec3<F32>& eye = VECTOR3_ZERO );
120
122 void fromCamera( const Camera& camera );
124 void fromSnapshot( const CameraSnapshot& snapshot );
126 bool updateLookAt();
128 void setReflection( const Plane<F32>& reflectionPlane ) noexcept;
130 void clearReflection() noexcept;
132 void setGlobalRotation( F32 yaw, F32 pitch, F32 roll = 0.0f ) noexcept;
134 void setGlobalRotation( const vec3<Angle::DEGREES<F32>>& euler ) noexcept;
136 const mat4<F32>& lookAt( const mat4<F32>& viewMatrix );
138 const mat4<F32>& lookAt( const vec3<F32>& eye, const vec3<F32>& target, const vec3<F32>& up );
140 const mat4<F32>& lookAt( const vec3<F32>& target );
142 const mat4<F32>& lookAt( const vec3<F32>& eye, const vec3<F32>& target );
145 void setYaw( const Angle::DEGREES<F32> angle ) noexcept;
147 void setPitch( const Angle::DEGREES<F32> angle ) noexcept;
149 void setRoll( const Angle::DEGREES<F32> angle ) noexcept;
152 void setGlobalYaw( const Angle::DEGREES<F32> angle ) noexcept;
154 void setGlobalPitch( const Angle::DEGREES<F32> angle ) noexcept;
156 void setGlobalRoll( const Angle::DEGREES<F32> angle ) noexcept;
158 void setEye( const F32 x, const F32 y, const F32 z ) noexcept;
160 void setEye( const vec3<F32>& position ) noexcept;
162 void setRotation( const Quaternion<F32>& q ) noexcept;
164 void setRotation( const Angle::DEGREES<F32> yaw, const Angle::DEGREES<F32> pitch, const Angle::DEGREES<F32> roll = 0.0f ) noexcept;
166 void rotate( const Quaternion<F32>& q );
169 void rotate( Angle::DEGREES<F32> yaw, Angle::DEGREES<F32> pitch, Angle::DEGREES<F32> roll ) noexcept;
171 void rotate( const vec3<F32>& axis, const Angle::DEGREES<F32> angle );
175 void rotateYaw( Angle::DEGREES<F32> angle );
177 void rotateRoll( Angle::DEGREES<F32> angle );
179 void rotatePitch( Angle::DEGREES<F32> angle );
181 void move( F32 dx, F32 dy, F32 dz ) noexcept;
183 void moveForward( const F32 factor ) noexcept;
185 void moveStrafe( const F32 factor ) noexcept;
187 void moveUp( const F32 factor ) noexcept;
189 void setFixedYawAxis( const bool useFixed, const vec3<F32>& fixedAxis = WORLD_Y_AXIS ) noexcept;
190 bool moveRelative( const vec3<F32>& relMovement );
191 bool rotateRelative( const vec3<F32>& relRotation );
192 bool zoom( F32 zoomFactor ) noexcept;
194 void setEuler( const vec3<Angle::DEGREES<F32>>& euler ) noexcept;
196 void setEuler( const Angle::DEGREES<F32>& pitch, const Angle::DEGREES<F32>& yaw, const Angle::DEGREES<F32>& roll ) noexcept;
197 void setAspectRatio( F32 ratio ) noexcept;
198 void setVerticalFoV( Angle::DEGREES<F32> verticalFoV ) noexcept;
199 void setHorizontalFoV( Angle::DEGREES<F32> horizontalFoV ) noexcept;
200
201 const mat4<F32>& setProjection( vec2<F32> zPlanes );
202 const mat4<F32>& setProjection( F32 verticalFoV, vec2<F32> zPlanes );
203 const mat4<F32>& setProjection( F32 aspectRatio, F32 verticalFoV, vec2<F32> zPlanes );
204 const mat4<F32>& setProjection( const vec4<F32>& rect, vec2<F32> zPlanes );
205 const mat4<F32>& setProjection( const mat4<F32>& projection, vec2<F32> zPlanes, bool isOrtho ) noexcept;
206
208 void setTarget( TransformComponent* tComp, const vec3<F32>& offsetDirection = VECTOR3_ZERO ) noexcept;
209 bool moveFromPlayerState( const SceneStatePerPlayer& playerState );
210
211 void saveToXML( boost::property_tree::ptree& pt, std::string prefix = "" ) const;
212 void loadFromXML( const boost::property_tree::ptree& pt, std::string prefix = "" );
213
216 [[nodiscard]] vec3<F32> unProject( F32 winCoordsX, F32 winCoordsY, const Rect<I32>& viewport ) const noexcept;
217 [[nodiscard]] vec3<F32> unProject( const vec3<F32>& winCoords, const Rect<I32>& viewport ) const noexcept;
218 [[nodiscard]] vec2<F32> project( const vec3<F32>& worldCoords, const Rect<I32>& viewport ) const noexcept;
219
220 [[nodiscard]] bool removeUpdateListener( U32 id );
221 [[nodiscard]] U32 addUpdateListener( const CameraListener& f );
222
224 [[nodiscard]] const CameraSnapshot& snapshot() const noexcept;
226 [[nodiscard]] Angle::DEGREES<F32> getHorizontalFoV() const noexcept;
228 [[nodiscard]] const mat4<F32>& viewMatrix() const noexcept;
230 [[nodiscard]] const mat4<F32>& viewMatrix() noexcept;
232 [[nodiscard]] const mat4<F32>& projectionMatrix() const noexcept;
234 [[nodiscard]] const mat4<F32>& projectionMatrix() noexcept;
236 [[nodiscard]] const mat4<F32>& viewProjectionMatrix() const noexcept;
238 [[nodiscard]] const mat4<F32>& viewProjectionMatrix() noexcept;
240 [[nodiscard]] const mat4<F32>& worldMatrix() const noexcept;
242 [[nodiscard]] const mat4<F32>& worldMatrix() noexcept;
244 [[nodiscard]] const Frustum& getFrustum() const noexcept;
246 [[nodiscard]] Frustum& getFrustum() noexcept;
247
249 PROPERTY_R_IW( vec3<Angle::DEGREES<F32>>, euler, VECTOR3_ZERO );
250 PROPERTY_RW( vec3<F32>, speedFactor, { 5.f } );
251 PROPERTY_RW( F32, maxRadius, 10.f );
252 PROPERTY_RW( F32, minRadius, 0.1f );
253 PROPERTY_RW( F32, curRadius, 8.f );
255 PROPERTY_RW( bool, frustumLocked, false );
256 PROPERTY_RW( bool, rotationLocked, false );
257 PROPERTY_RW( bool, movementLocked, false );
258 PROPERTY_R_IW( bool, reflectionActive, false );
259
260 public:
261 [[nodiscard]] static mat4<F32> LookAt( const vec3<F32>& eye, const vec3<F32>& target, const vec3<F32>& up ) noexcept;
262 template<bool zeroToOneDepth = true>
263 [[nodiscard]] static mat4<F32> Ortho( F32 left, F32 right, F32 bottom, F32 top, F32 zNear, F32 zFar ) noexcept;
264 template<bool zeroToOneDepth = true>
265 [[nodiscard]] static mat4<F32> Perspective( Angle::DEGREES<F32> fovyRad, F32 aspect, F32 zNear, F32 zFar ) noexcept;
266 template<bool zeroToOneDepth = true>
267 [[nodiscard]] static mat4<F32> FrustumMatrix( F32 left, F32 right, F32 bottom, F32 top, F32 nearVal, F32 farVal ) noexcept;
268
269 protected:
271 bool updateFrustum();
272 bool updateViewMatrix() noexcept;
273 bool updateProjection() noexcept;
274 void update() noexcept;
275
276 protected:
290 bool _projectionDirty{ true };
291 bool _viewMatrixDirty{ false };
292 bool _frustumDirty{ true };
293 bool _yawFixed{ false };
294 bool _rotationDirty{ true };
295
296 // Camera pool
297 public:
298 static void Update( U64 deltaTimeUS );
299 static void InitPool();
300 static void DestroyPool();
301 static bool DestroyCamera( Camera*& camera );
302
303 static Camera* GetUtilityCamera( const UtilityCamera type );
304
305 static Camera* CreateCamera( const Str<256>& cameraName, Mode cameraMode );
306 static Camera* FindCamera( const U64 nameHash );
307
308 static bool RemoveChangeListener( U32 id );
309 static U32 AddChangeListener( const CameraListener& f );
310
311 protected:
312
313 static CameraEntry* FindCameraEntry( const U64 nameHash );
314 static CameraEntry* FindCameraEntryLocked( const U64 nameHash );
315 };
316
318
319 namespace Names
320 {
321 static const char* cameraMode[] = {
322 "FREE_FLY",
323 "STATIC",
324 "FIRST_PERSON",
325 "THIRD_PERSON",
326 "ORBIT",
327 "SCRIPTED",
328 "UNKNOWN"
329 };
330 }
331 static_assert(ArrayCount( Names::cameraMode ) == to_base( Camera::Mode::COUNT ) + 1, "Camera::Mode name array out of sync!");
332
333 namespace TypeUtil
334 {
335 [[nodiscard]] const char* CameraModeToString( Camera::Mode mode ) noexcept;
336 [[nodiscard]] Camera::Mode StringToCameraMode( const string& name );
337 };
338
339}; // namespace Divide
340#endif //DVD_CAMERA_H_
341
342#include "Camera.inl"
#define PROPERTY_RW(...)
Convenience method to add a class member with public read access and write access.
#define PROPERTY_R_IW(...)
Convenience method to add a class member with public read access but protected write access including...
#define TYPEDEF_SMART_POINTERS_FOR_TYPE(T)
constexpr auto ArrayCount(Args &&... args) -> decltype(std::size(FWD(args)...))
const mat4< F32 > & worldMatrix() const noexcept
Returns the most recent/up-to-date inverse of the view matrix.
Definition: Camera.inl:197
F32 _currentRotationY
Definition: Camera.h:288
const mat4< F32 > & projectionMatrix() const noexcept
Returns the most recent/up-to-date projection matrix.
Definition: Camera.inl:168
static void DestroyPool()
Definition: Camera.cpp:139
const mat4< F32 > & setProjection(vec2< F32 > zPlanes)
Definition: Camera.cpp:516
PROPERTY_RW(Mode, mode, Mode::COUNT)
vec3< F32 > _fixedYawAxis
Definition: Camera.h:284
bool updateViewMatrix() noexcept
Definition: Camera.cpp:818
void rotatePitch(Angle::DEGREES< F32 > angle)
Change camera's pitch.
Definition: Camera.cpp:663
bool rotateRelative(const vec3< F32 > &relRotation)
Definition: Camera.cpp:748
static CameraEntry * FindCameraEntryLocked(const U64 nameHash)
Definition: Camera.cpp:208
const mat4< F32 > & viewProjectionMatrix() const noexcept
Returns the most recent/up-to-date viewProjection matrix.
Definition: Camera.inl:186
mat4< F32 > _viewProjectionMatrix
Definition: Camera.h:281
const mat4< F32 > & viewMatrix() const noexcept
Returns the most recent/up-to-date view matrix.
Definition: Camera.inl:157
static Camera * GetUtilityCamera(const UtilityCamera type)
Definition: Camera.cpp:120
void moveStrafe(const F32 factor) noexcept
Moves the camera left or right.
Definition: Camera.inl:129
const mat4< F32 > & lookAt(const mat4< F32 > &viewMatrix)
Sets the camera's view matrix to specify the specified value by extracting the eye position,...
Definition: Camera.cpp:354
const Frustum & getFrustum() const noexcept
Returns the most recent/up-to-date frustum.
Definition: Camera.inl:202
bool updateFrustum()
Extract the frustum associated with our current PoV.
Definition: Camera.cpp:856
Angle::DEGREES< F32 > getHorizontalFoV() const noexcept
Returns the horizontal field of view, calculated from the vertical FoV and aspect ratio.
Definition: Camera.cpp:586
void rotateYaw(Angle::DEGREES< F32 > angle)
Definition: Camera.cpp:653
static Camera * CreateCamera(const Str< 256 > &cameraName, Mode cameraMode)
Definition: Camera.cpp:147
const CameraSnapshot & snapshot() const noexcept
Returns the internal camera snapshot data (eye, orientation, etc)
Definition: Camera.inl:43
bool _rotationDirty
Definition: Camera.h:294
static void InitPool()
Definition: Camera.cpp:130
PROPERTY_R_IW(bool, reflectionActive, false)
static mat4< F32 > LookAt(const vec3< F32 > &eye, const vec3< F32 > &target, const vec3< F32 > &up) noexcept
Definition: Camera.cpp:938
PROPERTY_RW(F32, curRadius, 8.f)
void setAspectRatio(F32 ratio) noexcept
Definition: Camera.cpp:568
static constexpr F32 s_minNearZ
Definition: Camera.h:95
Plane< F32 > _reflectionPlane
Definition: Camera.h:282
bool updateLookAt()
Return true if the cached camera state wasn't up-to-date.
Definition: Camera.cpp:384
void fromSnapshot(const CameraSnapshot &snapshot)
Sets the internal snapshot data (eye, orientation, etc) to match the specified value.
Definition: Camera.cpp:297
bool _yawFixed
Definition: Camera.h:293
Frustum _frustum
Definition: Camera.h:279
void rotateRoll(Angle::DEGREES< F32 > angle)
Change camera's roll.
Definition: Camera.cpp:658
CameraListenerMap _updateCameraListeners
Definition: Camera.h:277
void moveUp(const F32 factor) noexcept
Moves the camera up or down.
Definition: Camera.inl:135
void setPitch(const Angle::DEGREES< F32 > angle) noexcept
Sets the camera's Pitch angle. Yaw and Roll are previous extracted values.
Definition: Camera.inl:70
static Camera * FindCamera(const U64 nameHash)
Definition: Camera.cpp:224
void setFixedYawAxis(const bool useFixed, const vec3< F32 > &fixedAxis=WORLD_Y_AXIS) noexcept
Exactly as in Ogre3D: locks the yaw movement to the specified axis.
Definition: Camera.inl:141
void rotate(const Quaternion< F32 > &q)
Rotates the camera (changes its orientation) by the specified quaternion (_orientation *= q)
Definition: Camera.cpp:427
PROPERTY_RW(F32, minRadius, 0.1f)
bool _projectionDirty
Definition: Camera.h:290
static constexpr F32 MAX_CAMERA_MOVE_SPEED
Definition: Camera.h:93
void setGlobalRotation(F32 yaw, F32 pitch, F32 roll=0.0f) noexcept
Global rotations are applied relative to the world axis, not the camera's.
Definition: Camera.cpp:405
PROPERTY_RW(F32, maxRadius, 10.f)
void setHorizontalFoV(Angle::DEGREES< F32 > horizontalFoV) noexcept
Definition: Camera.cpp:580
void setRoll(const Angle::DEGREES< F32 > angle) noexcept
Sets the camera's Roll angle. Yaw and Pitch are previous extracted values.
Definition: Camera.inl:76
vec3< Angle::RADIANS< F32 > > _cameraRotation
Definition: Camera.h:283
bool removeUpdateListener(U32 id)
Definition: Camera.cpp:450
Angle::DEGREES< F32 > _accumPitchDegrees
Definition: Camera.h:286
void setGlobalPitch(const Angle::DEGREES< F32 > angle) noexcept
Sets the camera's Pitch angle. Yaw and Roll are previous extracted values.
Definition: Camera.inl:89
void setTarget(TransformComponent *tComp, const vec3< F32 > &offsetDirection=VECTOR3_ZERO) noexcept
Offset direction is a (eventually normalized) vector that is scaled by curRadius and applied to the c...
Definition: Camera.cpp:348
void setEuler(const vec3< Angle::DEGREES< F32 > > &euler) noexcept
Set the camera's rotation to match the specified euler angles.
Definition: Camera.inl:147
bool moveFromPlayerState(const SceneStatePerPlayer &playerState)
Definition: Camera.cpp:704
static constexpr F32 DEFAULT_CAMERA_TURN_SPEED
Definition: Camera.h:92
vec3< F32 > unProject(F32 winCoordsX, F32 winCoordsY, const Rect< I32 > &viewport) const noexcept
Definition: Camera.cpp:879
void setVerticalFoV(Angle::DEGREES< F32 > verticalFoV) noexcept
Definition: Camera.cpp:574
void setGlobalRoll(const Angle::DEGREES< F32 > angle) noexcept
Sets the camera's Roll angle. Yaw and Pitch are previous extracted values.
Definition: Camera.inl:95
void setEye(const F32 x, const F32 y, const F32 z) noexcept
Sets the camera's eye position.
Definition: Camera.inl:100
static mat4< F32 > Perspective(Angle::DEGREES< F32 > fovyRad, F32 aspect, F32 zNear, F32 zFar) noexcept
Definition: Camera.inl:245
static CameraEntry * FindCameraEntry(const U64 nameHash)
Definition: Camera.cpp:200
TransformComponent * _targetTransform
Definition: Camera.h:280
void moveForward(const F32 factor) noexcept
Moves the camera forward or backwards.
Definition: Camera.inl:123
CameraSnapshot _data
Definition: Camera.h:278
static constexpr F32 MAX_CAMERA_TURN_SPEED
Definition: Camera.h:94
static mat4< F32 > Ortho(F32 left, F32 right, F32 bottom, F32 top, F32 zNear, F32 zFar) noexcept
Definition: Camera.inl:219
void saveToXML(boost::property_tree::ptree &pt, std::string prefix="") const
Definition: Camera.cpp:969
void fromCamera(const Camera &camera)
Copies all of the internal data from the specified camera to the current one.
Definition: Camera.cpp:272
U32 _updateCameraId
Definition: Camera.h:289
bool _frustumDirty
Definition: Camera.h:292
F32 _currentRotationX
Definition: Camera.h:287
bool zoom(F32 zoomFactor) noexcept
Definition: Camera.cpp:806
void setReflection(const Plane< F32 > &reflectionPlane) noexcept
Specify a reflection plane that alters the final view matrix to be a mirror of the internal lookAt ma...
Definition: Camera.cpp:472
PROPERTY_RW(bool, rotationLocked, false)
bool updateProjection() noexcept
Definition: Camera.cpp:485
static U32 AddChangeListener(const CameraListener &f)
Definition: Camera.cpp:249
static bool RemoveChangeListener(U32 id)
Definition: Camera.cpp:235
bool _viewMatrixDirty
Definition: Camera.h:291
static bool DestroyCamera(Camera *&camera)
Definition: Camera.cpp:175
bool moveRelative(const vec3< F32 > &relMovement)
Definition: Camera.cpp:737
vec2< F32 > project(const vec3< F32 > &worldCoords, const Rect< I32 > &viewport) const noexcept
Definition: Camera.cpp:917
static mat4< F32 > FrustumMatrix(F32 left, F32 right, F32 bottom, F32 top, F32 nearVal, F32 farVal) noexcept
Definition: Camera.inl:273
void setGlobalYaw(const Angle::DEGREES< F32 > angle) noexcept
Definition: Camera.inl:83
PROPERTY_RW(bool, frustumLocked, false)
void loadFromXML(const boost::property_tree::ptree &pt, std::string prefix="")
Definition: Camera.cpp:1017
void setRotation(const Quaternion< F32 > &q) noexcept
Sets the camera's orientation.
Definition: Camera.inl:111
static constexpr F32 DEFAULT_CAMERA_MOVE_SPEED
Definition: Camera.h:91
void clearReflection() noexcept
Clears the reflection plane specified (if any)
Definition: Camera.cpp:479
PROPERTY_RW(bool, movementLocked, false)
vec3< F32 > _offsetDir
Definition: Camera.h:285
static void Update(U64 deltaTimeUS)
Definition: Camera.cpp:107
void setYaw(const Angle::DEGREES< F32 > angle) noexcept
Definition: Camera.inl:64
U32 addUpdateListener(const CameraListener &f)
Definition: Camera.cpp:464
void move(F32 dx, F32 dy, F32 dz) noexcept
Moves the camera by the specified offsets in each direction.
Definition: Camera.cpp:668
void update() noexcept
Definition: Camera.cpp:317
Rough around the edges Adapter pattern abstracting the actual rendering API and access to the GPU.
Definition: GFXDevice.h:215
static const char * fStops[]
Definition: Camera.h:62
static const char * cameraMode[]
Definition: Camera.h:321
const char * CameraModeToString(const Camera::Mode mode) noexcept
Definition: Camera.cpp:34
Camera::Mode StringToCameraMode(const string &name)
Definition: Camera.cpp:39
FStops StringToFStops(const string &name)
Definition: Camera.cpp:21
const char * FStopsToString(const FStops stop) noexcept
Definition: Camera.cpp:16
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
static constexpr F32 g_FStopValues[to_base(FStops::COUNT)]
Definition: Camera.h:69
DELEGATE_STD< Ret, Args... > DELEGATE
int32_t I32
uint8_t U8
hashMap< U32, CameraListener > CameraListenerMap
Definition: Camera.h:80
static const vec3< F32 > WORLD_Z_AXIS
Definition: MathVectors.h:1441
hashAlg::unordered_map< K, V, HashFun, Predicate > hashMap
Definition: HashMap.h:55
FStops
Definition: Camera.h:44
static const vec4< F32 > VECTOR4_UNIT
Definition: MathVectors.h:1438
DELEGATE< void, const Camera & > CameraListener
Definition: Camera.h:79
static const vec3< F32 > VECTOR3_ZERO
Definition: MathVectors.h:1434
uint32_t U32
uint64_t U64
static const vec3< F32 > WORLD_Y_AXIS
Definition: MathVectors.h:1440
constexpr auto to_base(const Type value) -> Type
Definition: Camera.cpp:55