32 lines
720 B
C++
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;
|
|
}
|
|
}
|