Vesper 0.5.1
Vesper is short form for the Latin word for "Bat", as Vesper is designed to be small, lightweight, and easily handle things like particles and flocking behaviors in accordance with the nature of bats. \n It is meant to be a particle simulation, VFX editor, and CAN be used secondarily as a small game engine.
GitHub | Vesper Updates | Creator
Loading...
Searching...
No Matches
Vesper::EditorCamera Class Reference

#include <EditorCamera.h>

Inheritance diagram for Vesper::EditorCamera:
Vesper::Camera

Public Member Functions

 EditorCamera ()
 EditorCamera (float fov, float aspectRation, float nearClip, float farClip)
void OnUpdate (Timestep ts)
void OnEvent (Event &e)
float GetDistance () const
void SetDistance (float distance)
void SetViewportSize (float width, float height)
const glm::mat4 & GetViewMatrix () const
const glm::mat4 & GetViewProjection () const
glm::vec3 GetUpDirection () const
glm::vec3 GetRightDirection () const
glm::vec3 GetForwardDirection () const
glm::quat GetOrientation () const
const glm::vec3 & GetPosition () const
void SetPosition (const glm::vec3 &position)
float GetPitch () const
void SetPitch (float pitch)
float GetYaw () const
void SetYaw (float yaw)
Public Member Functions inherited from Vesper::Camera
 Camera ()=default
 Camera (const glm::mat4 &projection)
 ~Camera ()=default
const glm::mat4 & GetProjection () const

Private Member Functions

void UpdateProjection ()
void UpdateView ()
bool OnMouseScroll (MouseScrolledEvent &e)
void MousePan (const glm::vec2 &delta)
void MouseRotate (const glm::vec2 &delta)
void MouseZoom (float delta)
glm::vec3 CalculatePosition () const
std::pair< float, float > PanSpeed () const
float RotationSpeed () const
float ZoomSpeed () const

Private Attributes

float m_FOV = 45.0f
float m_AspectRatio = 1.778f
float m_NearClip = 0.1f
float m_FarClip = 1000.0f
glm::mat4 m_ViewMatrix
glm::vec3 m_Position = { 0.0f, 0.0f, 0.0f }
glm::vec3 m_FocalPoint = glm::vec3(1.0f)
glm::vec2 m_InitialMousePosition = { 0.0f, 0.0f }
float m_Distance = 10.0f
float m_Pitch = 0.0f
float m_Yaw = 0.0f
float m_ViewportWidth = 1280
float m_ViewportHeight = 720

Additional Inherited Members

Protected Attributes inherited from Vesper::Camera
glm::mat4 m_Projection = glm::mat4(1.0f)

Constructor & Destructor Documentation

◆ EditorCamera() [1/2]

Vesper::EditorCamera::EditorCamera ( )
13 {
14 }

◆ EditorCamera() [2/2]

Vesper::EditorCamera::EditorCamera ( float fov,
float aspectRation,
float nearClip,
float farClip )
16 : m_FOV(fov), m_AspectRatio(aspectRatio), m_NearClip(nearClip), m_FarClip(farClip), Camera(glm::perspective(glm::radians(fov), aspectRatio, nearClip, farClip))
17 {
18 UpdateView();
19 }
Camera()=default
void UpdateView()
Definition EditorCamera.cpp:77
float m_NearClip
Definition EditorCamera.h:59
float m_FarClip
Definition EditorCamera.h:59
float m_FOV
Definition EditorCamera.h:59
float m_AspectRatio
Definition EditorCamera.h:59

References EditorCamera(), m_AspectRatio, m_FarClip, m_FOV, m_NearClip, and UpdateView().

Referenced by EditorCamera().

Member Function Documentation

◆ CalculatePosition()

glm::vec3 Vesper::EditorCamera::CalculatePosition ( ) const
private
120 {
122 }
glm::vec3 GetForwardDirection() const
Definition EditorCamera.cpp:133
float m_Distance
Definition EditorCamera.h:67
glm::vec3 m_FocalPoint
Definition EditorCamera.h:63

◆ GetDistance()

float Vesper::EditorCamera::GetDistance ( ) const
inline
20{ return m_Distance; }

References m_Distance.

◆ GetForwardDirection()

glm::vec3 Vesper::EditorCamera::GetForwardDirection ( ) const
133 {
134 return glm::rotate(GetOrientation(), glm::vec3(0.0f, 0.0f, -1.0f));
135 }
glm::quat GetOrientation() const
Definition EditorCamera.cpp:137

◆ GetOrientation()

glm::quat Vesper::EditorCamera::GetOrientation ( ) const
137 {
138 return glm::quat(glm::vec3(-m_Pitch, -m_Yaw, 0.0f));
139 }
float m_Yaw
Definition EditorCamera.h:68
float m_Pitch
Definition EditorCamera.h:68

◆ GetPitch()

float Vesper::EditorCamera::GetPitch ( ) const
inline
36{ return m_Pitch; }

References m_Pitch.

◆ GetPosition()

const glm::vec3 & Vesper::EditorCamera::GetPosition ( ) const
inline
33{ return m_Position; }
glm::vec3 m_Position
Definition EditorCamera.h:62

◆ GetRightDirection()

glm::vec3 Vesper::EditorCamera::GetRightDirection ( ) const
129 {
130 return glm::rotate(GetOrientation(), glm::vec3(1.0f, 0.0f, 0.0f));
131 }

◆ GetUpDirection()

glm::vec3 Vesper::EditorCamera::GetUpDirection ( ) const
124 {
125
126 return glm::rotate(GetOrientation(), glm::vec3(0.0f, 1.0f, 0.0f));
127 }

◆ GetViewMatrix()

const glm::mat4 & Vesper::EditorCamera::GetViewMatrix ( ) const
inline
25{ return m_ViewMatrix; }
glm::mat4 m_ViewMatrix
Definition EditorCamera.h:61

◆ GetViewProjection()

const glm::mat4 & Vesper::EditorCamera::GetViewProjection ( ) const
inline
26{ return m_Projection * m_ViewMatrix; }
glm::mat4 m_Projection
Definition Camera.h:17

◆ GetYaw()

float Vesper::EditorCamera::GetYaw ( ) const
inline
39{ return m_Yaw; }

References m_Yaw.

◆ MousePan()

void Vesper::EditorCamera::MousePan ( const glm::vec2 & delta)
private
96 {
97 auto [xSpeed, ySpeed] = PanSpeed();
98 m_FocalPoint += -GetRightDirection() * delta.x * xSpeed * m_Distance;
99 m_FocalPoint += GetUpDirection() * delta.y * ySpeed * m_Distance;
100 }
std::pair< float, float > PanSpeed() const
Definition EditorCamera.cpp:21
glm::vec3 GetRightDirection() const
Definition EditorCamera.cpp:129
glm::vec3 GetUpDirection() const
Definition EditorCamera.cpp:124

◆ MouseRotate()

void Vesper::EditorCamera::MouseRotate ( const glm::vec2 & delta)
private
103 {
104 float yawSign = GetUpDirection().y < 0 ? -1.0f : 1.0f;
105 m_Yaw += yawSign * delta.x * RotationSpeed();
106 m_Pitch += delta.y * RotationSpeed();
107 }
float RotationSpeed() const
Definition EditorCamera.cpp:32

References m_Pitch, m_Yaw, and RotationSpeed().

◆ MouseZoom()

void Vesper::EditorCamera::MouseZoom ( float delta)
private
110 {
111 m_Distance -= delta * ZoomSpeed();
112 if (m_Distance < 1.0f)
113 {
115 m_Distance = 1.0f;
116 }
117 }
float ZoomSpeed() const
Definition EditorCamera.cpp:37

References m_Distance, and ZoomSpeed().

Referenced by OnMouseScroll(), and OnUpdate().

◆ OnEvent()

void Vesper::EditorCamera::OnEvent ( Event & e)
66 {
67 EventDispatcher dispatcher(e);
68 dispatcher.Dispatch<MouseScrolledEvent>(VZ_BIND_EVENT_FN(EditorCamera::OnMouseScroll));
69 }
#define VZ_BIND_EVENT_FN(fn)
Binds a member function as an event handler.
Definition Defines_Macros.h:17
bool OnMouseScroll(MouseScrolledEvent &e)
Definition EditorCamera.cpp:87

References Vesper::EventDispatcher::EventDispatcher(), and OnMouseScroll().

◆ OnMouseScroll()

bool Vesper::EditorCamera::OnMouseScroll ( MouseScrolledEvent & e)
private
88 {
89 float delta = e.GetYOffset() * 0.1f;
90 MouseZoom(delta);
91 UpdateView();
92 return false;
93 }
void MouseZoom(float delta)
Definition EditorCamera.cpp:109

References Vesper::MouseScrolledEvent::GetYOffset(), MouseZoom(), and UpdateView().

Referenced by OnEvent().

◆ OnUpdate()

void Vesper::EditorCamera::OnUpdate ( Timestep ts)
47 {
49 {
50 const glm::vec2& mouse{ Input::GetMouseX(), Input::GetMouseY() };
51 glm::vec2 delta = (mouse - m_InitialMousePosition) * 0.003f;
53
55 MousePan(delta);
57 MouseRotate(delta);
59 MouseZoom(-delta.y);
60 }
61
62 UpdateView();
63 }
void MousePan(const glm::vec2 &delta)
Definition EditorCamera.cpp:95
glm::vec2 m_InitialMousePosition
Definition EditorCamera.h:65
void MouseRotate(const glm::vec2 &delta)
Definition EditorCamera.cpp:102
static bool IsMouseButtonPressed(int button)
Checks if the specified mouse button is currently pressed.
Definition WindowsInput.cpp:16
static float GetMouseY()
Gets the current Y position of the mouse cursor.
Definition WindowsInput.cpp:36
static bool IsKeyPressed(int keycode)
Checks if the specified key is currently pressed.
Definition WindowsInput.cpp:9
static float GetMouseX()
Gets the current X position of the mouse cursor.
Definition WindowsInput.cpp:32
@ LeftAlt
Definition KeyCodes.h:141
@ ButtonMiddle
Definition MouseButtonCodes.h:28
@ ButtonRight
Definition MouseButtonCodes.h:27
@ ButtonLeft
Definition MouseButtonCodes.h:26

References Vesper::Mouse::ButtonLeft, Vesper::Mouse::ButtonMiddle, Vesper::Mouse::ButtonRight, Vesper::Input::IsKeyPressed(), Vesper::Input::IsMouseButtonPressed(), Vesper::Key::LeftAlt, MouseZoom(), and UpdateView().

◆ PanSpeed()

std::pair< float, float > Vesper::EditorCamera::PanSpeed ( ) const
private
22 {
23 float x = std::min(m_ViewportWidth / 1000.0f, 2.4f); // max = 2.4f
24 float xFactor = 0.0366f * (x * x) - 0.1778f * x + 0.3021f;
25
26 float y = std::min(m_ViewportHeight / 1000.0f, 2.4f); // max = 2.4f
27 float yFactor = 0.0366f * (y * y) - 0.1778f * y + 0.3021f;
28
29 return { xFactor, yFactor };
30 }
float m_ViewportHeight
Definition EditorCamera.h:70
float m_ViewportWidth
Definition EditorCamera.h:70

◆ RotationSpeed()

float Vesper::EditorCamera::RotationSpeed ( ) const
private
33 {
34 return 0.8f;
35 }

Referenced by MouseRotate().

◆ SetDistance()

void Vesper::EditorCamera::SetDistance ( float distance)
inline
21{ m_Distance = distance; }

References m_Distance.

◆ SetPitch()

void Vesper::EditorCamera::SetPitch ( float pitch)
inline
37{ m_Pitch = pitch; }

References m_Pitch.

◆ SetPosition()

void Vesper::EditorCamera::SetPosition ( const glm::vec3 & position)

◆ SetViewportSize()

void Vesper::EditorCamera::SetViewportSize ( float width,
float height )
inline
void UpdateProjection()
Definition EditorCamera.cpp:71

References m_ViewportHeight, m_ViewportWidth, and UpdateProjection().

◆ SetYaw()

void Vesper::EditorCamera::SetYaw ( float yaw)
inline
40{ m_Yaw = yaw; }

References m_Yaw.

◆ UpdateProjection()

void Vesper::EditorCamera::UpdateProjection ( )
private
72 {
74 m_Projection = glm::perspective(glm::radians(m_FOV), m_AspectRatio, m_NearClip, m_FarClip);
75 }

References m_AspectRatio, m_ViewportHeight, and m_ViewportWidth.

Referenced by SetViewportSize().

◆ UpdateView()

void Vesper::EditorCamera::UpdateView ( )
private
78 {
79 //m_Yaw = m_Pitch = 0.0f; // Lock the camera's rotation
81
82 glm::quat orientation = GetOrientation();
83 m_ViewMatrix = glm::translate(glm::mat4(1.0f), m_Position) * glm::toMat4(orientation);
84 m_ViewMatrix = glm::inverse(m_ViewMatrix);
85 }
glm::vec3 CalculatePosition() const
Definition EditorCamera.cpp:119

Referenced by EditorCamera(), OnMouseScroll(), and OnUpdate().

◆ ZoomSpeed()

float Vesper::EditorCamera::ZoomSpeed ( ) const
private
38 {
39 float distance = m_Distance * 0.2f;
40 distance = std::max(distance, 0.0f);
41 float speed = distance * distance;
42 speed = std::min(speed, 100.0f); // max speed = 100
43 return speed;
44 }

References m_Distance.

Referenced by MouseZoom().

Member Data Documentation

◆ m_AspectRatio

float Vesper::EditorCamera::m_AspectRatio = 1.778f
private

Referenced by EditorCamera(), and UpdateProjection().

◆ m_Distance

float Vesper::EditorCamera::m_Distance = 10.0f
private

◆ m_FarClip

float Vesper::EditorCamera::m_FarClip = 1000.0f
private

Referenced by EditorCamera().

◆ m_FocalPoint

glm::vec3 Vesper::EditorCamera::m_FocalPoint = glm::vec3(1.0f)
private

◆ m_FOV

float Vesper::EditorCamera::m_FOV = 45.0f
private

Referenced by EditorCamera().

◆ m_InitialMousePosition

glm::vec2 Vesper::EditorCamera::m_InitialMousePosition = { 0.0f, 0.0f }
private
65{ 0.0f, 0.0f };

◆ m_NearClip

float Vesper::EditorCamera::m_NearClip = 0.1f
private

Referenced by EditorCamera().

◆ m_Pitch

float Vesper::EditorCamera::m_Pitch = 0.0f
private

Referenced by GetPitch(), MouseRotate(), and SetPitch().

◆ m_Position

glm::vec3 Vesper::EditorCamera::m_Position = { 0.0f, 0.0f, 0.0f }
private
62{ 0.0f, 0.0f, 0.0f };

◆ m_ViewMatrix

glm::mat4 Vesper::EditorCamera::m_ViewMatrix
private

◆ m_ViewportHeight

float Vesper::EditorCamera::m_ViewportHeight = 720
private

◆ m_ViewportWidth

float Vesper::EditorCamera::m_ViewportWidth = 1280
private

◆ m_Yaw

float Vesper::EditorCamera::m_Yaw = 0.0f
private

Referenced by GetYaw(), MouseRotate(), and SetYaw().


The documentation for this class was generated from the following files: