/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #ifndef __NFRUSTRUM__ #define __NFRUSTRUM__ #include "geometry/plane.h" class nMatrix4; namespace GS { struct Shape; class MinMax; /*! @short Frustum. @author Emmanuel Julien (ejulien@nworks.fr) */ class Frustum { public: enum Visibility { Outside = 0, Inside, Clipped }; enum VolumePlane { Top = 0, Bottom, Left, Right, Near, Far }; protected: Vector4 vtx[8]; ///< Frustum vertices. Plane plane[6]; ///< Frustum planes. public: inline const Vector4 *GetVertices() const { return vtx; } /// Compute perspective frustum volume planes. void SetPerspective(float fov, float near, float far, const Matrix4 *m = 0, float h_ar = 1, float v_ar = 1); /// Compute orthographic frustum volume planes. void SetOrthographic(float width, float height, float near, float far, const Matrix4 *m = 0, float h_ar = 1, float v_ar = 1); /// Return the visibility flag of a vector set against this frustum. Visibility ClassifySet(uint count, const Vector4 * const GSRESTRICT set, const float offset = 0) const; /// Return the visibility flag of a frustum against this frustum. Visibility ClassifyFrustrum(const Frustum &frustum) const; /// Return the visibility flag of a sphere against this frustum. Visibility ClassifySphere(const Vector4 &p, float r) const; /// Return the visibility flag of a minmax against this frustum. Visibility ClassifyMinMax(const MinMax &mm, const Matrix4 *m = 0) const; /// Return the visibility flag of a shape against this frustum. Visibility ClassifyShape(const Shape &s, const Matrix4 *m = 0) const; }; } // GS #endif // __NFRUSTRUM__