12#ifndef CSCI441_ARCBALL_CAM_HPP
13#define CSCI441_ARCBALL_CAM_HPP
15#include "PerspectiveCamera.hpp"
35 explicit ArcballCam(GLfloat minRadius = 2.0f, GLfloat maxRadius = 30.0f, GLfloat aspectRatio = 1.0f, GLfloat fovy = 45.0f, GLfloat nearClipPlane = 0.001f, GLfloat farClipPlane = 1000.0f);
88 void _updateArcballCameraViewMatrix();
107 const GLfloat minRadius,
108 const GLfloat maxRadius,
109 const GLfloat aspectRatio,
111 const GLfloat nearClipPlane,
112 const GLfloat farClipPlane
114 _minRadius(minRadius),
115 _maxRadius(maxRadius)
122 mCameraDirection.x = glm::sin(mCameraTheta ) * glm::sin(mCameraPhi ) * mCameraRadius;
123 mCameraDirection.y = -glm::cos(mCameraPhi ) * mCameraRadius;
124 mCameraDirection.z = -glm::cos(mCameraTheta ) * glm::sin(mCameraPhi ) * mCameraRadius;
126 _updateArcballCameraViewMatrix();
130 mCameraRadius -= movementFactor;
132 recomputeOrientation();
136 mCameraRadius += movementFactor;
138 recomputeOrientation();
141inline void CSCI441::ArcballCam::_updateArcballCameraViewMatrix() {
142 setPosition(mCameraLookAtPoint + mCameraDirection );
146inline void CSCI441::ArcballCam::_clampRadius() {
147 mCameraRadius = glm::clamp(mCameraRadius, _minRadius, _maxRadius);
A camera that implements an ArcBall camera model.
Definition: ArcballCam.hpp:23
void recomputeOrientation() override
converts spherical theta & phi to cartesian x,y,z direction vector
Definition: ArcballCam.hpp:120
ArcballCam & operator=(const ArcballCam &)=default
assign a copy of an existing camera
~ArcballCam() override=default
properly destroy concrete children
ArcballCam & operator=(ArcballCam &&)=default
reassign an existing camera to ourselves
ArcballCam(const ArcballCam &)=default
construct a copy an existing camera
void moveForward(GLfloat movementFactor) override
updates the camera's position by decreasing the camera's radius
Definition: ArcballCam.hpp:129
void moveBackward(GLfloat movementFactor) override
updates the camera's position by increasing the camera's radius
Definition: ArcballCam.hpp:135
ArcballCam(ArcballCam &&)=default
construct a camera by moving ane existing camera object
ArcballCam(GLfloat minRadius=2.0f, GLfloat maxRadius=30.0f, GLfloat aspectRatio=1.0f, GLfloat fovy=45.0f, GLfloat nearClipPlane=0.001f, GLfloat farClipPlane=1000.0f)
initializes the Arcball Camera and sets the minimum/maximum radius the camera can zoom through as wel...
Definition: ArcballCam.hpp:106
Abstract Class to represent a perspective camera. Stores aspect ratio and field of view.
Definition: PerspectiveCamera.hpp:11
CSCI441 Helper Functions for OpenGL.
Definition: ArcballCam.hpp:17