64 lines
1.7 KiB
C++
64 lines
1.7 KiB
C++
|
#include "Camera.h"
|
||
|
|
||
|
glm::mat4 Camera::GetViewMatrix() const
|
||
|
{
|
||
|
return glm::lookAt(Position, Position + Front, Up);
|
||
|
}
|
||
|
|
||
|
void Camera::ProcessKeyboard(CameraMovement direction, float deltaTime)
|
||
|
{
|
||
|
float velocity = MovementSpeed * deltaTime;
|
||
|
if (direction == FORWARD)
|
||
|
Position += Front * velocity;
|
||
|
if (direction == BACKWARD)
|
||
|
Position -= Front * velocity;
|
||
|
if (direction == LEFT)
|
||
|
Position -= Right * velocity;
|
||
|
if (direction == RIGHT)
|
||
|
Position += Right * velocity;
|
||
|
if (direction == UP)
|
||
|
Position += Up * velocity;
|
||
|
if (direction == DOWN)
|
||
|
Position -= Up * velocity;
|
||
|
}
|
||
|
|
||
|
void Camera::ProcessMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch)
|
||
|
{
|
||
|
xoffset *= MouseSensitivity;
|
||
|
yoffset *= MouseSensitivity;
|
||
|
|
||
|
Yaw += xoffset;
|
||
|
Pitch += yoffset;
|
||
|
|
||
|
// make sure that when pitch is out of bounds, screen doesn't get flipped
|
||
|
if (constrainPitch)
|
||
|
{
|
||
|
if (Pitch > 89.0f)
|
||
|
Pitch = 89.0f;
|
||
|
if (Pitch < -89.0f)
|
||
|
Pitch = -89.0f;
|
||
|
}
|
||
|
|
||
|
// update Front, Right and Up Vectors using the updated Euler angles
|
||
|
UpdateCameraVectors();
|
||
|
}
|
||
|
|
||
|
void Camera::ProcessMouseScroll(float yoffset)
|
||
|
{
|
||
|
Zoom -= (float)yoffset;
|
||
|
if (Zoom < 1.0f)
|
||
|
Zoom = 1.0f;
|
||
|
if (Zoom > 45.0f)
|
||
|
Zoom = 45.0f;
|
||
|
}
|
||
|
|
||
|
void Camera::UpdateCameraVectors()
|
||
|
{
|
||
|
glm::vec3 front;
|
||
|
front.x = cos(glm::radians(Yaw)) * cos(glm::radians(Pitch));
|
||
|
front.y = sin(glm::radians(Pitch));
|
||
|
front.z = sin(glm::radians(Yaw)) * cos(glm::radians(Pitch));
|
||
|
Front = glm::normalize(front);
|
||
|
Right = glm::normalize(glm::cross(Front, WorldUp));
|
||
|
Up = glm::normalize(glm::cross(Right, Front));
|
||
|
}
|