com.jme.math
Class Ray

java.lang.Object
  extended by com.jme.math.Ray
All Implemented Interfaces:
Savable, java.io.Serializable, java.lang.Cloneable

public class Ray
extends java.lang.Object
implements java.io.Serializable, Savable, java.lang.Cloneable

Ray defines a line segment which has an origin and a direction. That is, a point and an infinite ray is cast from this point. The ray is defined by the following equation: R(t) = origin + t*direction for t >= 0.

Author:
Mark Powell, Joshua Slack
See Also:
Serialized Form

Field Summary
 Vector3f direction
          The direction of the ray.
 Vector3f origin
          The ray's begining point.
protected static Vector3f tempVa
           
protected static Vector3f tempVb
           
protected static Vector3f tempVc
           
protected static Vector3f tempVd
           
 
Constructor Summary
Ray()
          Constructor instantiates a new Ray object.
Ray(Vector3f origin, Vector3f direction)
          Constructor instantiates a new Ray object.
 
Method Summary
 Ray clone()
           
 float distanceSquared(Vector3f point)
           
 java.lang.Class<? extends Ray> getClassTag()
           
 Vector3f getDirection()
          getDirection retrieves the direction vector of the ray.
 Vector3f getOrigin()
          getOrigin retrieves the origin point of the ray.
 boolean intersect(Triangle t)
          intersect determines if the Ray intersects a triangle.
 boolean intersect(Vector3f v0, Vector3f v1, Vector3f v2)
          intersect determines if the Ray intersects a triangle defined by the specified points.
 boolean intersectsWherePlane(Plane p, Vector3f loc)
           
 boolean intersectWhere(Triangle t, Vector3f loc)
          intersectWhere determines if the Ray intersects a triangle.
 boolean intersectWhere(Vector3f v0, Vector3f v1, Vector3f v2, Vector3f loc)
          intersectWhere determines if the Ray intersects a triangle defined by the specified points and if so it stores the point of intersection in the given loc vector.
 boolean intersectWherePlanar(Triangle t, Vector3f loc)
          intersectWherePlanar determines if the Ray intersects a triangle and if so it stores the point of intersection in the given loc vector as t, u, v where t is the distance from the origin to the point of intersection and u,v is the intersection point in terms of the triangle plane.
 boolean intersectWherePlanar(Vector3f v0, Vector3f v1, Vector3f v2, Vector3f loc)
          intersectWherePlanar determines if the Ray intersects a triangle defined by the specified points and if so it stores the point of intersection in the given loc vector as t, u, v where t is the distance from the origin to the point of intersection and u,v is the intersection point in terms of the triangle plane.
 boolean intersectWherePlanarQuad(Vector3f v0, Vector3f v1, Vector3f v2, Vector3f loc)
          intersectWherePlanar determines if the Ray intersects a quad defined by the specified points and if so it stores the point of intersection in the given loc vector as t, u, v where t is the distance from the origin to the point of intersection and u,v is the intersection point in terms of the quad plane.
 void read(JMEImporter e)
           
 void set(Ray source)
          Copies information from a source ray into this ray.
 void setDirection(Vector3f direction)
          setDirection sets the direction vector of the ray.
 void setOrigin(Vector3f origin)
          setOrigin sets the origin of the ray.
 void write(JMEExporter e)
           
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

origin

public Vector3f origin
The ray's begining point.


direction

public Vector3f direction
The direction of the ray.


tempVa

protected static final Vector3f tempVa

tempVb

protected static final Vector3f tempVb

tempVc

protected static final Vector3f tempVc

tempVd

protected static final Vector3f tempVd
Constructor Detail

Ray

public Ray()
Constructor instantiates a new Ray object. As default, the origin is (0,0,0) and the direction is (0,0,0).


Ray

public Ray(Vector3f origin,
           Vector3f direction)
Constructor instantiates a new Ray object. The origin and direction are given.

Parameters:
origin - the origin of the ray.
direction - the direction the ray travels in.
Method Detail

intersect

public boolean intersect(Triangle t)
intersect determines if the Ray intersects a triangle.

Parameters:
t - the Triangle to test against.
Returns:
true if the ray collides.

intersect

public boolean intersect(Vector3f v0,
                         Vector3f v1,
                         Vector3f v2)
intersect determines if the Ray intersects a triangle defined by the specified points.

Parameters:
v0 - first point of the triangle.
v1 - second point of the triangle.
v2 - third point of the triangle.
Returns:
true if the ray collides.

intersectWhere

public boolean intersectWhere(Triangle t,
                              Vector3f loc)
intersectWhere determines if the Ray intersects a triangle. It then stores the point of intersection in the given loc vector

Parameters:
t - the Triangle to test against.
loc - storage vector to save the collision point in (if the ray collides)
Returns:
true if the ray collides.

intersectWhere

public boolean intersectWhere(Vector3f v0,
                              Vector3f v1,
                              Vector3f v2,
                              Vector3f loc)
intersectWhere determines if the Ray intersects a triangle defined by the specified points and if so it stores the point of intersection in the given loc vector.

Parameters:
v0 - first point of the triangle.
v1 - second point of the triangle.
v2 - third point of the triangle.
loc - storage vector to save the collision point in (if the ray collides) if null, only boolean is calculated.
Returns:
true if the ray collides.

intersectWherePlanar

public boolean intersectWherePlanar(Triangle t,
                                    Vector3f loc)
intersectWherePlanar determines if the Ray intersects a triangle and if so it stores the point of intersection in the given loc vector as t, u, v where t is the distance from the origin to the point of intersection and u,v is the intersection point in terms of the triangle plane.

Parameters:
t - the Triangle to test against.
loc - storage vector to save the collision point in (if the ray collides) as t, u, v
Returns:
true if the ray collides.

intersectWherePlanar

public boolean intersectWherePlanar(Vector3f v0,
                                    Vector3f v1,
                                    Vector3f v2,
                                    Vector3f loc)
intersectWherePlanar determines if the Ray intersects a triangle defined by the specified points and if so it stores the point of intersection in the given loc vector as t, u, v where t is the distance from the origin to the point of intersection and u,v is the intersection point in terms of the triangle plane.

Parameters:
v0 - first point of the triangle.
v1 - second point of the triangle.
v2 - third point of the triangle.
loc - storage vector to save the collision point in (if the ray collides) as t, u, v
Returns:
true if the ray collides.

intersectWherePlanarQuad

public boolean intersectWherePlanarQuad(Vector3f v0,
                                        Vector3f v1,
                                        Vector3f v2,
                                        Vector3f loc)
intersectWherePlanar determines if the Ray intersects a quad defined by the specified points and if so it stores the point of intersection in the given loc vector as t, u, v where t is the distance from the origin to the point of intersection and u,v is the intersection point in terms of the quad plane. One edge of the quad is [v0,v1], another one [v0,v2]. The behaviour thus is like intersectWherePlanar(Vector3f, Vector3f, Vector3f, Vector3f) except for the extended area, which is equivalent to the union of the triangles [v0,v1,v2] and [-v0+v1+v2,v1,v2].

Parameters:
v0 - top left point of the quad.
v1 - top right point of the quad.
v2 - bottom left point of the quad.
loc - storage vector to save the collision point in (if the ray collides) as t, u, v
Returns:
true if the ray collides with the quad.

intersectsWherePlane

public boolean intersectsWherePlane(Plane p,
                                    Vector3f loc)
Parameters:
p -
loc -
Returns:
true if the ray collides with the given Plane

distanceSquared

public float distanceSquared(Vector3f point)

getOrigin

public Vector3f getOrigin()
getOrigin retrieves the origin point of the ray.

Returns:
the origin of the ray.

setOrigin

public void setOrigin(Vector3f origin)
setOrigin sets the origin of the ray.

Parameters:
origin - the origin of the ray.

getDirection

public Vector3f getDirection()
getDirection retrieves the direction vector of the ray.

Returns:
the direction of the ray.

setDirection

public void setDirection(Vector3f direction)
setDirection sets the direction vector of the ray.

Parameters:
direction - the direction of the ray.

set

public void set(Ray source)
Copies information from a source ray into this ray.

Parameters:
source - the ray to copy information from

write

public void write(JMEExporter e)
           throws java.io.IOException
Specified by:
write in interface Savable
Throws:
java.io.IOException

read

public void read(JMEImporter e)
          throws java.io.IOException
Specified by:
read in interface Savable
Throws:
java.io.IOException

getClassTag

public java.lang.Class<? extends Ray> getClassTag()
Specified by:
getClassTag in interface Savable

clone

public Ray clone()
Overrides:
clone in class java.lang.Object