54 lines
2.0 KiB
C++
54 lines
2.0 KiB
C++
|
#include "camera.h"
|
||
|
|
||
|
namespace CameraControls {
|
||
|
void TranslateCamera(Camera& camera, const glm::vec3& translationDelta) {
|
||
|
TransformControls::Translate(camera.transform, translationDelta);
|
||
|
}
|
||
|
void RotateCamera(Camera& camera, const glm::vec3& rotationDelta) {
|
||
|
TransformControls::Rotate(camera.transform, rotationDelta);
|
||
|
}
|
||
|
|
||
|
void SetPosition(Camera& camera, const glm::vec3& position) {
|
||
|
TransformControls::SetPosition(camera.transform, position);
|
||
|
}
|
||
|
void SetRotation(Camera& camera, const glm::vec3& rotation) {
|
||
|
TransformControls::SetRotation(camera.transform, rotation);
|
||
|
}
|
||
|
|
||
|
glm::vec3 GetPosition(Camera& camera) {
|
||
|
return camera.transform.translation;
|
||
|
}
|
||
|
glm::vec3 GetRotation(Camera& camera) {
|
||
|
return camera.transform.rotation;
|
||
|
}
|
||
|
glm::vec3 GetCenter(Camera& camera) {
|
||
|
glm::vec3 forward;
|
||
|
forward.x = cos(camera.transform.rotation.y) * cos(camera.transform.rotation.x);
|
||
|
forward.y = sin(camera.transform.rotation.x);
|
||
|
forward.z = sin(camera.transform.rotation.y) * cos(camera.transform.rotation.x);
|
||
|
|
||
|
return GetPosition(camera) + GetRotation(camera);
|
||
|
}
|
||
|
float GetFOV(Camera& camera) {
|
||
|
return 2.0f * atan(camera.sensorHeight / (2.0f * camera.focalLength));
|
||
|
}
|
||
|
|
||
|
void AdjustFocalLength(Camera& camera, float focalLength) {
|
||
|
camera.focalLength = focalLength;
|
||
|
}
|
||
|
void AdjustSensorHeight(Camera& camera, float sensorHeight) {
|
||
|
camera.sensorHeight = sensorHeight;
|
||
|
}
|
||
|
void AdjustNearPlane(Camera& camera, float nearPlane) {
|
||
|
camera.nearPlane = nearPlane;
|
||
|
}
|
||
|
void AdjustFarPlane(Camera& camera, float farPlane) {
|
||
|
camera.farPlane = farPlane;
|
||
|
}
|
||
|
|
||
|
glm::mat4 GetViewMatrix(Camera& camera) {
|
||
|
//return glm::lookAt(glm::vec3(0.0f, 1.4f, 1.4f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
|
||
|
return glm::lookAt(GetPosition(camera), GetCenter(camera), glm::vec3(0.0f, 1.0f, 0.0f));
|
||
|
}
|
||
|
}
|