// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Math module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_MATH_FRUSTUM_HPP #define NAZARA_MATH_FRUSTUM_HPP #include #include #include #include #include #include #include #include #include #include namespace Nz { struct SerializationContext; template class Frustum { public: Frustum() = default; explicit Frustum(const std::array, FrustumPlaneCount>& planes); template explicit Frustum(const Frustum& frustum); Frustum(const Frustum& frustum) = default; ~Frustum() = default; Vector3 ComputeCorner(BoxCorner corner) const; bool Contains(const BoundingVolume& volume) const; bool Contains(const Box& box) const; bool Contains(const OrientedBox& orientedBox) const; bool Contains(const Sphere& sphere) const; bool Contains(const Vector3& point) const; bool Contains(const Vector3* points, std::size_t pointCount) const; const Plane& GetPlane(FrustumPlane plane) const; IntersectionSide Intersect(const BoundingVolume& volume) const; IntersectionSide Intersect(const Box& box) const; IntersectionSide Intersect(const OrientedBox& orientedBox) const; IntersectionSide Intersect(const Sphere& sphere) const; IntersectionSide Intersect(const Vector3* points, std::size_t pointCount) const; std::string ToString() const; Frustum& operator=(const Frustum& other) = default; static Frustum Build(RadianAngle angle, T ratio, T zNear, T zFar, const Vector3& eye, const Vector3& target, const Vector3& up = Vector3::Up()); static Frustum Extract(const Matrix4& viewProjMatrix); template friend bool Serialize(SerializationContext& context, const Frustum& frustum, TypeTag>); template friend bool Unserialize(SerializationContext& context, Frustum* frustum, TypeTag>); private: std::array, FrustumPlaneCount> m_planes; }; using Frustumd = Frustum; using Frustumf = Frustum; template std::ostream& operator<<(std::ostream& out, const Nz::Frustum& frustum); } #include #endif // NAZARA_MATH_FRUSTUM_HPP