com.jme3.bounding
Class BoundingBox

java.lang.Object
  extended by com.jme3.bounding.BoundingVolume
      extended by com.jme3.bounding.BoundingBox
All Implemented Interfaces:
Collidable, Savable, java.lang.Cloneable

public class BoundingBox
extends BoundingVolume

BoundingBox defines an axis-aligned cube that defines a container for a group of vertices of a particular piece of geometry. This box defines a center and extents from that center along the x, y and z axis.

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.


Nested Class Summary
 
Nested classes/interfaces inherited from class com.jme3.bounding.BoundingVolume
BoundingVolume.Type
 
Field Summary
 
Fields inherited from class com.jme3.bounding.BoundingVolume
center, checkPlane
 
Constructor Summary
BoundingBox()
          Default constructor instantiates a new BoundingBox object.
BoundingBox(BoundingBox source)
           
BoundingBox(Vector3f c, float x, float y, float z)
          Contstructor instantiates a new BoundingBox object with given specs.
BoundingBox(Vector3f min, Vector3f max)
           
 
Method Summary
static void checkMinMax(Vector3f min, Vector3f max, Vector3f point)
           
 BoundingVolume clone(BoundingVolume store)
          clone creates a new BoundingBox object containing the same data as this one.
 int collideWith(Collidable other, CollisionResults results)
          Check collision with another Collidable.
 void computeFromPoints(java.nio.FloatBuffer points)
          computeFromPoints creates a new Bounding Box from a given set of points.
 void computeFromTris(int[] indices, Mesh mesh, int start, int end)
           
 void computeFromTris(Triangle[] tris, int start, int end)
          computeFromTris creates a new Bounding Box from a given set of triangles.
 void containAABB(java.nio.FloatBuffer points)
          containAABB creates a minimum-volume axis-aligned bounding box of the points, then selects the smallest enclosing sphere of the box with the sphere centered at the boxes center.
 boolean contains(Vector3f point)
          determines if a given point is contained within this bounding volume.
 float distanceToEdge(Vector3f point)
          Find the distance from the nearest edge of this Bounding Volume to the given point.
 Vector3f getExtent(Vector3f store)
          Query extent.
 Vector3f getMax(Vector3f store)
           
 Vector3f getMin(Vector3f store)
           
 BoundingVolume.Type getType()
          getType returns the type of bounding volume this is.
 float getVolume()
           
 float getXExtent()
           
 float getYExtent()
           
 float getZExtent()
           
 boolean intersects(BoundingVolume bv)
          intersects determines if this Bounding Box intersects with another given bounding volume.
 boolean intersects(Ray ray)
          determines if this bounding box intersects with a given ray object.
 boolean intersects(Vector3f point)
          Determines if a given point intersects (touches or is inside) this bounding volume.
 boolean intersects(Vector3f v1, Vector3f v2, Vector3f v3)
          C code ported from http://www.cs.lth.se/home/Tomas_Akenine_Moller/code/tribox3.txt
 boolean intersectsBoundingBox(BoundingBox bb)
          determines if this bounding box intersects a given bounding box.
 boolean intersectsSphere(BoundingSphere bs)
          determines if this bounding box intersects a given bounding sphere.
 BoundingVolume merge(BoundingVolume volume)
          merge combines this bounding box with a second bounding box.
 BoundingVolume mergeLocal(BoundingVolume volume)
          mergeLocal combines this sphere with a second bounding sphere locally.
 void read(JmeImporter e)
           
 void setMinMax(Vector3f min, Vector3f max)
           
 void setXExtent(float xExtent)
           
 void setYExtent(float yExtent)
           
 void setZExtent(float zExtent)
           
 java.lang.String toString()
          toString returns the string representation of this object.
 BoundingVolume transform(Matrix4f trans, BoundingVolume store)
           
 BoundingVolume transform(Transform trans, BoundingVolume store)
          transform modifies the center of the box to reflect the change made via a rotation, translation and scale.
 Plane.Side whichSide(Plane plane)
          whichSide takes a plane (typically provided by a view frustum) to determine which side this bound is on.
 void write(JmeExporter e)
           
 
Methods inherited from class com.jme3.bounding.BoundingVolume
clone, distanceSquaredTo, distanceTo, getCenter, getCenter, getCheckPlane, setCenter, setCheckPlane, transform
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

BoundingBox

public BoundingBox()
Default constructor instantiates a new BoundingBox object.


BoundingBox

public BoundingBox(Vector3f c,
                   float x,
                   float y,
                   float z)
Contstructor instantiates a new BoundingBox object with given specs.


BoundingBox

public BoundingBox(BoundingBox source)

BoundingBox

public BoundingBox(Vector3f min,
                   Vector3f max)
Method Detail

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

computeFromPoints

public void computeFromPoints(java.nio.FloatBuffer points)
computeFromPoints creates a new Bounding Box from a given set of points. It uses the containAABB method as default.

Specified by:
computeFromPoints in class BoundingVolume
Parameters:
points - the points to contain.

computeFromTris

public void computeFromTris(Triangle[] tris,
                            int start,
                            int end)
computeFromTris creates a new Bounding Box from a given set of triangles. It is used in OBBTree calculations.

Parameters:
tris -
start -
end -

computeFromTris

public void computeFromTris(int[] indices,
                            Mesh mesh,
                            int start,
                            int end)

checkMinMax

public static void checkMinMax(Vector3f min,
                               Vector3f max,
                               Vector3f point)

containAABB

public void containAABB(java.nio.FloatBuffer points)
containAABB creates a minimum-volume axis-aligned bounding box of the points, then selects the smallest enclosing sphere of the box with the sphere centered at the boxes center.

Parameters:
points - the list of points.

transform

public BoundingVolume transform(Transform trans,
                                BoundingVolume store)
transform modifies the center of the box to reflect the change made via a rotation, translation and scale.

Specified by:
transform in class BoundingVolume
Parameters:
trans - the transform to apply
store - box to store result in
Returns:
the new bounding volume.

transform

public BoundingVolume transform(Matrix4f trans,
                                BoundingVolume store)
Specified by:
transform in class BoundingVolume

whichSide

public Plane.Side whichSide(Plane 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:
the side on which this bounding volume lies.

merge

public BoundingVolume merge(BoundingVolume volume)
merge combines this bounding box with a second bounding box. This new box contains both bounding box and is returned.

Specified by:
merge in class BoundingVolume
Parameters:
volume - the bounding box to combine with this bounding box.
Returns:
the new bounding box

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

clone

public BoundingVolume clone(BoundingVolume store)
clone creates a new BoundingBox 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 BoundingBox

toString

public java.lang.String toString()
toString returns the string representation of this object. The form is: "Radius: RRR.SSSS Center: ".

Overrides:
toString in class java.lang.Object
Returns:
the string representation of this.

intersects

public boolean intersects(BoundingVolume bv)
intersects determines if this Bounding Box intersects with another given bounding volume. If so, true is returned, otherwise, false is returned.

Specified by:
intersects in class BoundingVolume
Parameters:
bv - the second volume to test against.
Returns:
true if this volume intersects the given volume.
See Also:
BoundingVolume.intersects(com.jme3.bounding.BoundingVolume)

intersectsSphere

public boolean intersectsSphere(BoundingSphere bs)
determines if this bounding box intersects a given bounding sphere.

Specified by:
intersectsSphere in class BoundingVolume
Parameters:
bs - the bounding sphere to test against.
Returns:
true if this volume intersects the given bounding sphere.
See Also:
BoundingVolume.intersectsSphere(com.jme3.bounding.BoundingSphere)

intersectsBoundingBox

public boolean intersectsBoundingBox(BoundingBox bb)
determines if this bounding box intersects a given bounding box. If the two boxes intersect in any way, true is returned. Otherwise, false is returned.

Specified by:
intersectsBoundingBox in class BoundingVolume
Parameters:
bb - the bounding box to test against.
Returns:
true if this volume intersects the given bounding box.
See Also:
BoundingVolume.intersectsBoundingBox(com.jme3.bounding.BoundingBox)

intersects

public boolean intersects(Ray ray)
determines if this bounding box intersects with a given ray object. If an intersection has occurred, true is returned, otherwise false is returned.

Specified by:
intersects in class BoundingVolume
Parameters:
ray - the ray to test.
Returns:
true if this volume is intersected by a given ray.
See Also:
BoundingVolume.intersects(com.jme3.math.Ray)

collideWith

public int collideWith(Collidable other,
                       CollisionResults results)
Description copied from interface: Collidable
Check collision with another Collidable.

Parameters:
other - The object to check collision against
results - Will contain the list of CollisionResults.
Returns:
how many collisions were found between this and other

intersects

public boolean intersects(Vector3f v1,
                          Vector3f v2,
                          Vector3f v3)
C code ported from http://www.cs.lth.se/home/Tomas_Akenine_Moller/code/tribox3.txt

Parameters:
v1 - The first point in the triangle
v2 - The second point in the triangle
v3 - The third point in the triangle
Returns:
True if the bounding box intersects the triangle, false otherwise.

contains

public boolean contains(Vector3f point)
Description copied from class: BoundingVolume
determines if a given point is contained within this bounding volume. If the point is on the edge of the bounding volume, this method will return false. Use intersects(Vector3f) to check for edge intersection.

Specified by:
contains in class BoundingVolume
Parameters:
point - the point to check
Returns:
true if the point lies within this bounding volume.

intersects

public boolean intersects(Vector3f point)
Description copied from class: BoundingVolume
Determines if a given point intersects (touches or is inside) this bounding volume.

Specified by:
intersects in class BoundingVolume
Parameters:
point - the point to check
Returns:
true if the point lies within this bounding volume.

distanceToEdge

public float distanceToEdge(Vector3f 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

getExtent

public Vector3f getExtent(Vector3f store)
Query extent.

Parameters:
store - where extent gets stored - null to return a new vector
Returns:
store / new vector

getXExtent

public float getXExtent()

getYExtent

public float getYExtent()

getZExtent

public float getZExtent()

setXExtent

public void setXExtent(float xExtent)

setYExtent

public void setYExtent(float yExtent)

setZExtent

public void setZExtent(float zExtent)

getMin

public Vector3f getMin(Vector3f store)

getMax

public Vector3f getMax(Vector3f store)

setMinMax

public void setMinMax(Vector3f min,
                      Vector3f max)

write

public void write(JmeExporter e)
           throws java.io.IOException
Specified by:
write in interface Savable
Overrides:
write in class BoundingVolume
Throws:
java.io.IOException

read

public void read(JmeImporter e)
          throws java.io.IOException
Specified by:
read in interface Savable
Overrides:
read in class BoundingVolume
Throws:
java.io.IOException

getVolume

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