diff --git a/src/J3ML/Geometry/Frustum.cpp b/src/J3ML/Geometry/Frustum.cpp index 23931a1..b0fd005 100644 --- a/src/J3ML/Geometry/Frustum.cpp +++ b/src/J3ML/Geometry/Frustum.cpp @@ -1 +1,20 @@ #include + +namespace Geometry +{ + Frustum Frustum::CreateFrustumFromCamera(const CoordinateFrame &cam, float aspect, float fovY, float zNear, float zFar) { + Frustum frustum; + const float halfVSide = zFar * tanf(fovY * 0.5f); + const float halfHSide = halfVSide * aspect; + + const Vector3 frontMultFar = cam.Front * zFar; + + frustum.NearFace = Plane{cam.Position + cam.Front * zNear, cam.Front}; + frustum.FarFace = Plane{cam.Position + frontMultFar, -cam.Front}; + frustum.RightFace = Plane{cam.Position, Vector3::Cross(frontMultFar - cam.Right * halfHSide, cam.Up)}; + frustum.LeftFace = Plane{cam.Position, Vector3::Cross(cam.Up, frontMultFar+cam.Right*halfHSide)}; + frustum.TopFace = Plane{cam.Position, Vector3::Cross(cam.Right, frontMultFar - cam.Up * halfVSide)}; + frustum.BottomFace = Plane{cam.Position, Vector3::Cross(frontMultFar + cam.Up * halfVSide, cam.Right)}; + return frustum; + } +} \ No newline at end of file