|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object de.grogra.vecmath.geom.VolumeBase de.grogra.vecmath.geom.BoundingBox
public class BoundingBox
This class represents an axis-aligned bounding box. It contains
all points between the corners min
and
max
.
Constructor Summary | |
---|---|
BoundingBox(Point3d min,
Point3d max)
|
Method Summary | |
---|---|
boolean |
boxContainsBoundary(BoundingBox box,
Tuple3d center,
double radius,
Variables temp)
Returns true if the specified box contains
(part of) the boundary surface of this volume. |
boolean |
computeIntersections(Line line,
int which,
IntersectionList list,
Intersection excludeStart,
Intersection excludeEnd)
Computes intersections between the boundary surface of this object and the specified line . |
static boolean |
computeIntersections(Volume box,
Tuple3d min,
Tuple3d max,
Line line,
boolean all,
IntersectionList list,
int excludeStartFace,
int excludeEndFace)
Computes the intersections (or the first thereof, if all is false )
between the faces of the bounding box [min, max]
and the specified line , see also the general
method Volume.computeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection) . |
void |
computeNormal(Intersection is,
Vector3d normal)
This method computes the unit normal vector of an intersection is which has been computed previously by the invocation
of Volume.computeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection) on this volume. |
void |
computeTangents(Intersection is,
Vector3d dpdu,
Vector3d dpdv)
This method computes the derivatives of the surface point (as function of the uv-coordinates, see Volume.computeUV(de.grogra.vecmath.geom.Intersection, javax.vecmath.Vector2d) )
with respect to u and v at the intersection point. |
void |
computeUV(Intersection is,
Vector2d uv)
This method computes the uv-coordinates of an intersection point is which has been computed previously by the invocation
of Volume.computeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection) on this volume. |
boolean |
contains(Tuple3d point,
boolean open)
Determines if the given point lies within this object. |
boolean |
contains(Tuple3d point,
int excludedCoordinate)
|
void |
getExtent(Tuple3d min,
Tuple3d max,
Variables temp)
Computes the extent of this volume, i.e., an axis-aligned bounding box between min and max . |
int |
testParallelogram(Tuple3d a,
Tuple3d b,
Tuple3d c,
Tuple3d d,
Matrix3d inv,
Vector3d normal,
Vector3d v)
Determines if the specified parallelogram intersects this bounding box. |
java.lang.String |
toString()
|
Methods inherited from class de.grogra.vecmath.geom.VolumeBase |
---|
addConvexIntersections, getId, operator$and, operator$com, operator$or, operator$sub, setId |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final int ABOVE
testParallelogram(javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Matrix3d, javax.vecmath.Vector3d, javax.vecmath.Vector3d)
indicating that this bounding box
lies completely above the plane of the quad.
public static final int BELOW
testParallelogram(javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Matrix3d, javax.vecmath.Vector3d, javax.vecmath.Vector3d)
indicating that this bounding box
lies completely below the plane of the quad.
public static final int INTERSECTION
testParallelogram(javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Matrix3d, javax.vecmath.Vector3d, javax.vecmath.Vector3d)
indicating an intersection.
public Point3d max
public Point3d min
public static final int NO_INTERSECTION
testParallelogram(javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Tuple3d, javax.vecmath.Matrix3d, javax.vecmath.Vector3d, javax.vecmath.Vector3d)
indicating no intersection.
Constructor Detail |
---|
public BoundingBox(Point3d min, Point3d max)
Method Detail |
---|
public boolean boxContainsBoundary(BoundingBox box, Tuple3d center, double radius, Variables temp)
Volume
true
if the specified box
contains
(part of) the boundary surface of this volume. Otherwise, if box and
boundary do not overlap, this method should return false
,
but may also return true
if an exact computation
would be too expensive or complicated.
Note that a box contains the boundary of a closed set S iff both have a non-empty intersection and the box is not contained in the open set of S.
box
- bounding boxcenter
- center coordinates of boxradius
- radius of enclosing spheretemp
- has to be provided by the invoker, may be used in implementations
true
if box contains (part of) the boundary of this volumepublic boolean computeIntersections(Line line, int which, IntersectionList list, Intersection excludeStart, Intersection excludeEnd)
Volume
line
. The intersections are added
to list
in ascending order of distance
(i.e., of Intersection.parameter
), where the
parameter
has to lie between line.start
and line.end
.
Implementations of this method must not
clear or modify the existing intersections in list
.
The parameter which
has to be one of
Intersection.ALL
, Intersection.CLOSEST
,
Intersection.ANY
. It determines if all intersections
have to be added to the list, only the closest (minimal
value of Intersection.parameter
), or an arbitrary
of the set of all intersections. Only in case of ALL
,
the return value of this method is precise.
If specific intersection points should be excluded from the list
of computed intersections, they have to be specified in
excludeStart
and excludeEnd
.
The intersection point of excludeStart
has to be the
starting point of line
, the intersection point of
excludeEnd
has to be the end point of line
.
The exclusion of intersections is a useful feature for
ray-tracing, e.g., when a ray is re-emitted at an intersection point
in another direction.
line
- a linewhich
- one of Intersection.ALL
,
Intersection.CLOSEST
, Intersection.ANY
, this
determines which intersections have to be added to list
list
- the intersections are added to this listexcludeStart
- intersection at start point which shall be excluded, or null
excludeEnd
- intersection at end point which shall be excluded, or null
true
iff the beginning of the line lies
within the volume (i.e., if the line starts within the volume or
enters the volume at the starting point); however note that the returned
value is valid only if which == Intersection.ALL
public static boolean computeIntersections(Volume box, Tuple3d min, Tuple3d max, Line line, boolean all, IntersectionList list, int excludeStartFace, int excludeEndFace)
all
is false
)
between the faces of the bounding box [min, max]
and the specified line
, see also the general
method Volume.computeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection)
.
If excludeStartFace
is non-negative, it has to specify
one of the faces of the box, see Cube.LEFT
. The
intersection of the line and the specified face is excluded
from the set of computed intersections. In this case the starting
point of the line
has to lie on the specified
face.
If excludeEndFace
is non-negative, the same
treatment as for excludeStartFace
applies with the
requirement, that the end point of the line
has to lie
on the specified face.
box
- the boxmin
- minimum coordinates of boxmax
- maximum coordinates of boxline
- a lineall
- true
for all intersections,
false
for only the first (closest)
intersection has to be added to list
list
- the intersections are added to this listexcludeStartFace
- face which shall be excluded at start, or -1
excludeEndFace
- face which shall be excluded at end, or -1
true
iff the beginning of the line lies
within the box (i.e., if the line starts within the box or
enters the box at the starting point)public void computeNormal(Intersection is, Vector3d normal)
Volume
is
which has been computed previously by the invocation
of Volume.computeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection)
on this volume.
is
- a previously computed intersectionnormal
- resulting unit vector is placed in herepublic void computeTangents(Intersection is, Vector3d dpdu, Vector3d dpdv)
Volume
Volume.computeUV(de.grogra.vecmath.geom.Intersection, javax.vecmath.Vector2d)
)
with respect to u and v at the intersection point.
is
- a previously computed intersectiondpdu
- resulting derivative with respect to udpdv
- resulting derivative with respect to vpublic void computeUV(Intersection is, Vector2d uv)
Volume
is
which has been computed previously by the invocation
of Volume.computeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection)
on this volume.
is
- a previously computed intersectionuv
- resulting uv-coordinates are placed in herepublic boolean contains(Tuple3d point, boolean open)
Volume
point
lies within this object.
If open
is true
, the interior of the volume
is considered (the largest open set contained in the volume,
i.e., excluding the boundary), otherwise the closure of the volume.
point
- a point in global world coordinatesopen
- consider open or closed set
true
iff point
is an element of the setpublic boolean contains(Tuple3d point, int excludedCoordinate)
public void getExtent(Tuple3d min, Tuple3d max, Variables temp)
Volume
min
and max
.
min
- minimum coordinates of bounding box are placed in heremax
- maximum coordinates of bounding box are placed in heretemp
- has to be provided by the invoker, may be used in implementationspublic int testParallelogram(Tuple3d a, Tuple3d b, Tuple3d c, Tuple3d d, Matrix3d inv, Vector3d normal, Vector3d v)
(a, b, c, d)
of its corners.
a
- first corner of parallelogramb
- second corner of parallelogramc
- third corner of parallelogramd
- fourth corner of parallelograminv
- this matrix will be used internally by the methodnormal
- this vector will be used internally by the methodv
- this vector will be used internally by the method
INTERSECTION
, NO_INTERSECTION
,
ABOVE
, BELOW
public java.lang.String toString()
toString
in class java.lang.Object
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |