Files
2026-07-17 15:30:29 +01:00

78 lines
2.4 KiB
C++

#include "HydraCamera.h"
#include "../engine/HydraEngine.h"
#include "../windowmanager/HydraRenderSettings.h"
#include "../actor/HydraActor.h"
#include "../actor/HydraActorManager.h"
glm::mat4x4 HydraCamera::GetView()
{
glm::dvec3 actor_pos = glm::dvec3(0,0,0);
glm::mat4 actor_rot = glm::mat4(1);
glm::vec3 actor_euler = glm::vec3(0);
if(m_attached_actor != INVALID_HYDRA_ID)
{
HydraActor* actor = GetEngine()->ActorManager()->GetActor(m_attached_actor);
if(actor != nullptr)
{
actor_pos = (GetEngine()->ActorManager()->GetActorPosition(m_attached_actor)) * glm::dvec3(-1, -1, -1);
actor_euler = GetEngine()->ActorManager()->GetActorOrientation(m_attached_actor);
actor_rot = glm::eulerAngleXYZ(actor_euler.x, actor_euler.y, actor_euler.z);
}
}
glm::mat4 trans = glm::translate(actor_pos);
glm::mat4 rot = actor_rot;// * glm::eulerAngleXYZ(EulerAngle.x, EulerAngle.y, EulerAngle.z);
glm::mat4 camera_transform = rot * trans;
return camera_transform;
}
glm::mat4x4 HydraCamera::GetProjection()
{
HydraRenderSettings render_settings = GetEngine()->RenderSettings();
float fovRad = glm::radians(render_settings.FOV);
//glm::mat4 projection = glm::perspectiveLH<float>(fovRad, (float)render_settings->ViewportWidth / (float)render_settings->ViewportHeight, render_settings->Near, render_settings->Far);
glm::mat4 projection = glm::perspectiveRH<float>(fovRad, (float)render_settings.ViewportWidth / (float)render_settings.ViewportHeight, render_settings.Near, render_settings.Far);
// glm::mat4 correction = {1, 0, 0, 0,
// 0,-1, 0, 0,
// 0, 0, 0.5f,0.5f,
// 0,0, 0, 1};
// projection = correction * projection;
return projection;
}
glm::mat4x4 HydraCamera::GetOrthoProjection()
{
HydraRenderSettings render_settings = GetEngine()->RenderSettings();
float fovRad = glm::radians(render_settings.FOV);
glm::mat4 projection = glm::ortho<float>(0.0f, render_settings.DisplayWidth, 0, render_settings.DisplayHeight, 0.0f, 1000.0f);
return projection;
}
glm::vec3 HydraCamera::GetPosition()
{
glm::dvec3 actor_pos = glm::dvec3(0,0,0);
if(m_attached_actor != INVALID_HYDRA_ID)
{
HydraActor* actor = GetEngine()->ActorManager()->GetActor(m_attached_actor);
if(actor != nullptr)
{
actor_pos = (GetEngine()->ActorManager()->GetActorPosition(m_attached_actor)) * glm::dvec3(1, 1, 1);
}
}
return actor_pos;
}
void HydraCamera::AttachToActor(HydraID actorID)
{
m_attached_actor = actorID;
}