70 lines
1.4 KiB
C++
70 lines
1.4 KiB
C++
#include "camera.hpp"
|
|
#include <glm/gtc/matrix_transform.hpp>
|
|
#include <glm/gtc/type_ptr.hpp>
|
|
|
|
glm::mat4 Camera::look_at() {
|
|
return glm::lookAt(position, position + front, up);
|
|
}
|
|
|
|
void Camera::forward() {
|
|
dirty = true;
|
|
position += speed * front;
|
|
}
|
|
|
|
void Camera::back() {
|
|
dirty = true;
|
|
position -= speed * front;
|
|
}
|
|
|
|
void Camera::left() {
|
|
dirty = true;
|
|
position -= glm::normalize(glm::cross(front, up)) * speed;
|
|
}
|
|
|
|
void Camera::right() {
|
|
dirty = true;
|
|
position += glm::normalize(glm::cross(front, up)) * speed;
|
|
}
|
|
|
|
void Camera::update(float deltaTime) {
|
|
speed = movement_speed * deltaTime;
|
|
}
|
|
|
|
void Camera::mouse_move(double xpos, double ypos) {
|
|
dirty = true;
|
|
|
|
if(firstMouse) {
|
|
lastX = xpos;
|
|
lastY = ypos;
|
|
firstMouse = false;
|
|
}
|
|
|
|
float xoffset = xpos - lastX;
|
|
float yoffset = lastY - ypos;
|
|
lastX = xpos;
|
|
lastY = ypos;
|
|
|
|
const float sensitivity = 0.1f;
|
|
xoffset *= sensitivity;
|
|
yoffset *= sensitivity;
|
|
|
|
yaw += xoffset;
|
|
pitch += yoffset;
|
|
|
|
if(pitch > 89.0f) pitch = 89.0f;
|
|
if(pitch < -89.0f) pitch = -89.0f;
|
|
|
|
direction.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
|
|
direction.y = sin(glm::radians(pitch));
|
|
direction.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
|
|
|
|
front = glm::normalize(direction);
|
|
}
|
|
|
|
void Camera::mouse_scroll(double xoffset, double yoffset) {
|
|
dirty = true;
|
|
fov -= (float)yoffset;
|
|
|
|
if(fov < 1.0f) fov = 1.0f;
|
|
if(fov > 90.0f) fov = 90.0f;
|
|
}
|