Files
OpenVulkano/openVulkanoCpp/Scene/Camera.cpp
2024-11-07 17:33:39 +02:00

32 lines
720 B
C++

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "Camera.hpp"
namespace OpenVulkano::Scene
{
Ray Camera::CastRay(const Math::Vector2i& xy) const
{
using namespace Math::Utils;
// nds
float ndsX = (2.f * xy.x) / m_width - 1.0f;
float ndsY = (2.f * xy.y) / m_height - 1.0f;
Math::Vector4f rayClip = { ndsX, ndsY, 0, 1.f };
Math::Vector4f rayEye = inverse(m_projection) * rayClip;
rayEye.z = -1;
rayEye.a = 0;
Math::Vector3f rayWorld = normalize(GetWorldMatrix() * rayEye);
Ray r(GetPosition(), rayWorld);
return r;
}
}