Class Frustum

java.lang.Object
com.jogamp.opengl.math.geom.Frustum

public class Frustum extends Object
Providing frustum planes derived by different inputs (P*MV, ..) used to classify objects and to test whether they are outside

Extracting the world-frustum planes from the P*Mv:

 Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
   Gil Gribb <ggribb@ravensoft.com>
   Klaus Hartmann <k_hartmann@osnabrueck.netsurf.de>
   http://graphics.cs.ucf.edu/cap4720/fall2008/plane_extraction.pdf
 
Classifying Point, Sphere and AABBox:
 Efficient View Frustum Culling
   Daniel Sýkora <sykorad@fel.cvut.cz>
   Josef Jelínek <jelinej1@fel.cvut.cz>
   http://www.cg.tuwien.ac.at/hostings/cescg/CESCG-2002/DSykoraJJelinek/index.html
 
 Lighthouse3d.com
 http://www.lighthouse3d.com/tutorials/view-frustum-culling/
 
Fundamentals about Planes, Half-Spaces and Frustum-Culling:
 Planes and Half-Spaces,  Max Wagner <mwagner@digipen.edu>
 http://www.emeyex.com/site/tuts/PlanesHalfSpaces.pdf
 
 Frustum Culling,  Max Wagner <mwagner@digipen.edu>
 http://www.emeyex.com/site/tuts/FrustumCulling.pdf
 

  • Field Details

  • Constructor Details

  • Method Details

    • getPlanes

      public final Frustum.Plane[] getPlanes()
      Frustum.Planes are ordered in the returned array as follows:

      Frustum.Plane's normals are pointing to the inside of the frustum in order to work w/ isOutside(..) methods.

      Returns:
      array of normalized Frustum.Planes, order see above.
    • updateByPlanes

      public final void updateByPlanes(Frustum.Plane[] src)
      Copy the given src planes into this this instance's planes.
      Parameters:
      src - the 6 source planes
    • updateByFovDesc

      public float[] updateByFovDesc(float[] m, int m_offset, boolean initM, Frustum.FovDesc fovDesc)
      Calculate the frustum planes in world coordinates using the passed Frustum.FovDesc.

      Operation Details:

      Frustum plane's normals will point to the inside of the viewing frustum, as required by this class.

      Parameters:
      m - 4x4 matrix in column-major order (also result)
      m_offset - offset in given array m, i.e. start of the 4x4 matrix
      initM - if true, given matrix will be initialized w/ identity matrix, otherwise only the frustum fields are set.
      fovDesc - Frustum Frustum.FovDesc
      Returns:
      given matrix for chaining
      See Also:
    • updateByPMV

      public void updateByPMV(float[] pmv, int pmv_off)
      Calculate the frustum planes in world coordinates using the passed float[16] as premultiplied P*MV (column major order).

      Frustum plane's normals will point to the inside of the viewing frustum, as required by this class.

    • isAABBoxOutside

      public final boolean isAABBoxOutside(AABBox box)
      Check to see if an axis aligned bounding box is completely outside of the frustum.

      Note: If method returns false, the box may only be partially inside.

    • classifyPoint

      public final Frustum.Location classifyPoint(float[] p)
      Check to see if a point is outside, inside or on a plane of the frustum.
      Parameters:
      p - the point
      Returns:
      Frustum.Location of point related to frustum planes
    • isPointOutside

      public final boolean isPointOutside(float[] p)
      Check to see if a point is outside of the frustum.
      Parameters:
      p - the point
      Returns:
      true if outside of the frustum, otherwise inside or on a plane
    • classifySphere

      public final Frustum.Location classifySphere(float[] p, float radius)
      Check to see if a sphere is outside, intersecting or inside of the frustum.
      Parameters:
      p - center of the sphere
      radius - radius of the sphere
      Returns:
      Frustum.Location of point related to frustum planes
    • isSphereOutside

      public final boolean isSphereOutside(float[] p, float radius)
      Check to see if a sphere is outside of the frustum.
      Parameters:
      p - center of the sphere
      radius - radius of the sphere
      Returns:
      true if outside of the frustum, otherwise inside or intersecting
    • toString

      public StringBuilder toString(StringBuilder sb)
    • toString

      public String toString()
      Overrides:
      toString in class Object