public final class Ray extends java.lang.Object implements Savable, java.lang.Cloneable, Collidable, java.io.Serializable
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.
Modifier and Type | Field and Description |
---|---|
Vector3f |
direction
The direction of the ray.
|
float |
limit
The length of the ray (defaults to +Infinity).
|
Vector3f |
origin
The ray's beginning point.
|
Constructor and Description |
---|
Ray()
Constructor instantiates a new
Ray object. |
Ray(Vector3f origin,
Vector3f direction)
Constructor instantiates a new
Ray object. |
Modifier and Type | Method and Description |
---|---|
Ray |
clone()
Create a copy of this ray.
|
int |
collideWith(Collidable other,
CollisionResults results)
Check collision with another Collidable.
|
float |
distanceSquared(Vector3f point)
Calculate the squared distance from this ray to the specified point.
|
Vector3f |
getDirection()
getDirection retrieves the direction vector of the ray. |
float |
getLimit()
getLimit returns the limit of the ray, aka the length. |
Vector3f |
getOrigin()
getOrigin retrieves the origin point of the ray. |
float |
intersects(Vector3f v0,
Vector3f v1,
Vector3f v2) |
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)
De-serialize this ray from the specified importer, for example
when loading from a J3O file.
|
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 |
setLimit(float limit)
setLimit sets the limit of the ray. |
void |
setOrigin(Vector3f origin)
setOrigin sets the origin of the ray. |
java.lang.String |
toString()
Represent this ray as a String.
|
void |
write(JmeExporter e)
Serialize this ray to the specified exporter, for example when
saving to a J3O file.
|
public Vector3f origin
public Vector3f direction
public float limit
public Ray()
Ray
object. As default, the
origin is (0,0,0) and the direction is (0,0,1).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 vectort
- the Triangle to test against.loc
- storage vector to save the collision point in (if the ray
collides)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.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.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.t
- the Triangle to test against.loc
- storage vector to save the collision point in (if the ray
collides) as t, u, vpublic 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.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, vpublic 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].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, vpublic boolean intersectsWherePlane(Plane p, Vector3f loc)
p
- loc
- public int collideWith(Collidable other, CollisionResults results)
Collidable
collideWith
in interface Collidable
other
- The object to check collision againstresults
- Will contain the list of CollisionResult
s.public float distanceSquared(Vector3f point)
point
- location vector of the input point (not null, unaffected)public Vector3f getOrigin()
getOrigin
retrieves the origin point of the ray.public void setOrigin(Vector3f origin)
setOrigin
sets the origin of the ray.origin
- the origin of the ray.public float getLimit()
getLimit
returns the limit of the ray, aka the length.
If the limit is not infinity, then this ray is a line with length
limit
.public void setLimit(float limit)
setLimit
sets the limit of the ray.limit
- the limit of the ray.getLimit()
public Vector3f getDirection()
getDirection
retrieves the direction vector of the ray.public void setDirection(Vector3f direction)
setDirection
sets the direction vector of the ray.direction
- the direction of the ray.public void set(Ray source)
source
- the ray to copy information frompublic java.lang.String toString()
toString
in class java.lang.Object
public void write(JmeExporter e) throws java.io.IOException
public void read(JmeImporter e) throws java.io.IOException
public Ray clone()
clone
in class java.lang.Object