Class BoundingSphere

java.lang.Object
com.ardor3d.bounding.BoundingVolume
com.ardor3d.bounding.BoundingSphere
All Implemented Interfaces:
Savable, Serializable

public class BoundingSphere extends BoundingVolume
BoundingSphere defines a sphere that defines a container for a group of vertices of a particular piece of geometry. This sphere defines a radius and a center.

A typical usage is to allow the class define the center and radius by calling either containAABB or averagePoints. A call to computeFramePoint in turn calls containAABB.
See Also:
  • Field Details

    • _compVect3

      protected final Vector3 _compVect3
    • _compVect4

      protected final Vector3 _compVect4
  • Constructor Details

    • BoundingSphere

      public BoundingSphere()
      Default constructor instantiates a new BoundingSphere object.
    • BoundingSphere

      public BoundingSphere(double r, ReadOnlyVector3 c)
      Constructor instantiates a new BoundingSphere object.
      Parameters:
      r - the radius of the sphere.
      c - the center of the sphere.
  • Method Details

    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class BoundingVolume
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class BoundingVolume
    • getType

      public BoundingVolume.Type getType()
      Description copied from class: BoundingVolume
      getType returns the type of bounding volume this is.
      Specified by:
      getType in class BoundingVolume
      Returns:
      the type of bounding volume
    • transform

      public BoundingVolume transform(ReadOnlyTransform transform, BoundingVolume store)
      Description copied from class: BoundingVolume
      transform alters the location of the bounding volume by a transform.
      Specified by:
      transform in class BoundingVolume
      Parameters:
      transform - the transform
      store - the bounding volume used as a store
      Returns:
      the transformed bounding volume
    • getRadius

      public double getRadius()
      getRadius returns the radius of the bounding sphere.
      Specified by:
      getRadius in class BoundingVolume
      Returns:
      the radius of the bounding sphere.
    • setRadius

      public void setRadius(double radius)
      setRadius sets the radius of this bounding sphere.
      Parameters:
      radius - the new radius of the bounding sphere.
    • computeFromPoints

      public void computeFromPoints(FloatBuffer points)
      computeFromPoints creates a new Bounding Sphere from a given set of points. It uses the calcWelzl method as default.
      Specified by:
      computeFromPoints in class BoundingVolume
      Parameters:
      points - the points to contain.
    • computeFromPrimitives

      public void computeFromPrimitives(MeshData data, int section, int[] indices, int start, int end)
      Specified by:
      computeFromPrimitives in class BoundingVolume
    • calcWelzl

      public void calcWelzl(FloatBuffer points)
      Calculates a minimum bounding sphere for the set of points. The algorithm was originally found at http://www.flipcode.com/cgi-bin/msg.cgi?showThread=COTD-SmallestEnclosingSpheres&forum=cotd&id=-1 in C++ and translated to java by Cep21
      Parameters:
      points - The points to calculate the minimum bounds from.
    • populateFromBuffer

      public static void populateFromBuffer(Vector3 vector, float[] buf, int index)
    • setInBuffer

      public static void setInBuffer(ReadOnlyVector3 vector, float[] buf, int index)
    • averagePoints

      public void averagePoints(Vector3[] points)
      averagePoints selects the sphere center to be the average of the points and the sphere radius to be the smallest value to enclose all points.
      Parameters:
      points - the list of points to contain.
    • whichSide

      public ReadOnlyPlane.Side whichSide(ReadOnlyPlane plane)
      whichSide takes a plane (typically provided by a view frustum) to determine which side this bound is on.
      Specified by:
      whichSide in class BoundingVolume
      Parameters:
      plane - the plane to check against.
      Returns:
      side
    • merge

      public BoundingVolume merge(BoundingVolume volume)
      merge combines this sphere with a second bounding sphere. This new sphere contains both bounding spheres and is returned.
      Specified by:
      merge in class BoundingVolume
      Parameters:
      volume - the sphere to combine with this sphere.
      Returns:
      a new sphere
    • mergeLocal

      public BoundingVolume mergeLocal(BoundingVolume volume)
      mergeLocal combines this sphere with a second bounding sphere locally. Altering this sphere to contain both the original and the additional sphere volumes;
      Specified by:
      mergeLocal in class BoundingVolume
      Parameters:
      volume - the sphere to combine with this sphere.
      Returns:
      this
    • asType

      public BoundingVolume asType(BoundingVolume.Type newType)
      Description copied from class: BoundingVolume
      Convert this bounding volume to another, given bounding type.
      Specified by:
      asType in class BoundingVolume
      Parameters:
      newType - the type of bounding volume to convert to.
      Returns:
      a new bounding volume of the given type, containing this bounding volume.
    • clone

      public BoundingVolume clone(BoundingVolume store)
      clone creates a new BoundingSphere object containing the same data as this one.
      Specified by:
      clone in class BoundingVolume
      Parameters:
      store - where to store the cloned information. if null or wrong class, a new store is created.
      Returns:
      the new BoundingSphere
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • intersects

      public boolean intersects(BoundingVolume bv)
      Description copied from class: BoundingVolume
      determines if this bounding volume and a second given volume are intersecting. Intersecting being: one volume contains another, one volume overlaps another or one volume touches another.
      Specified by:
      intersects in class BoundingVolume
      Parameters:
      bv - the second volume to test against.
      Returns:
      true if this volume intersects the given volume.
    • intersectsSphere

      public boolean intersectsSphere(BoundingSphere bs)
      Description copied from class: BoundingVolume
      determines if this bounding volume and a given bounding sphere are intersecting.
      Specified by:
      intersectsSphere in class BoundingVolume
      Parameters:
      bs - the bounding sphere to test against.
      Returns:
      true if this volume intersects the given bounding sphere.
    • intersectsBoundingBox

      public boolean intersectsBoundingBox(BoundingBox bb)
      Description copied from class: BoundingVolume
      determines if this bounding volume and a given bounding box are intersecting.
      Specified by:
      intersectsBoundingBox in class BoundingVolume
      Parameters:
      bb - the bounding box to test against.
      Returns:
      true if this volume intersects the given bounding box.
    • intersectsOrientedBoundingBox

      public boolean intersectsOrientedBoundingBox(OrientedBoundingBox obb)
      Description copied from class: BoundingVolume
      determines if this bounding volume and a given bounding box are intersecting.
      Specified by:
      intersectsOrientedBoundingBox in class BoundingVolume
      Parameters:
      obb - the bounding box to test against.
      Returns:
      true if this volume intersects the given bounding box.
    • intersects

      public boolean intersects(ReadOnlyRay3 ray)
      Description copied from class: BoundingVolume
      determines if a ray intersects this bounding volume.
      Specified by:
      intersects in class BoundingVolume
      Parameters:
      ray - the ray to test.
      Returns:
      true if this volume is intersected by a given ray.
    • intersectsWhere

      public IntersectionRecord intersectsWhere(ReadOnlyRay3 ray)
      Description copied from class: BoundingVolume
      determines if a ray intersects this bounding volume and if so, where.
      Specified by:
      intersectsWhere in class BoundingVolume
      Parameters:
      ray - the ray to test.
      Returns:
      an IntersectionRecord containing information about any intersections made by the given Ray with this bounding
    • contains

      public boolean contains(ReadOnlyVector3 point)
      Description copied from class: BoundingVolume
      determines if a given point is contained within this bounding volume.
      Specified by:
      contains in class BoundingVolume
      Parameters:
      point - the point to check
      Returns:
      true if the point lies within this bounding volume.
    • distanceToEdge

      public double distanceToEdge(ReadOnlyVector3 point)
      Description copied from class: BoundingVolume
      Find the distance from the nearest edge of this Bounding Volume to the given point.
      Specified by:
      distanceToEdge in class BoundingVolume
      Parameters:
      point - The point to get the distance to
      Returns:
      distance
    • write

      public void write(OutputCapsule capsule) throws IOException
      Specified by:
      write in interface Savable
      Overrides:
      write in class BoundingVolume
      Throws:
      IOException
    • read

      public void read(InputCapsule capsule) throws IOException
      Specified by:
      read in interface Savable
      Overrides:
      read in class BoundingVolume
      Throws:
      IOException
    • getVolume

      public double getVolume()
      Specified by:
      getVolume in class BoundingVolume