- All Known Implementing Classes:
BoundingBox
,CompoundVolume
,Cone
,CSGComplement
,CSGDifference
,CSGIntersection
,CSGUnion
,Cube
,Cylinder
,EmptyVolume
,Frustum
,FrustumBase
,GridClonerUnion
,HalfSpace
,ImplicitVolume
,Lamella
,MeshVolume
,MyMeshVolume
,OctreeUnion
,SensorDisc
,SimpleUnion
,SkySphere
,Sphere
,SphereSegmentSolid
,Square
,Supershape
,TransformableVolume
,UnionBase
,VolumeBase
- Author:
- Ole Kniemeyer
-
Method Summary
Modifier and TypeMethodDescriptionboolean
boxContainsBoundary
(BoundingBox box, Tuple3d center, double radius, Variables temp) Returnstrue
if the specifiedbox
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 specifiedline
.void
computeNormal
(Intersection is, Vector3d normal) This method computes the unit normal vector of an intersectionis
which has been computed previously by the invocation ofcomputeIntersections(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, seecomputeUV(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 pointis
which has been computed previously by the invocation ofcomputeIntersections(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
Determines if the givenpoint
lies within this object.void
Computes the extent of this volume, i.e., an axis-aligned bounding box betweenmin
andmax
.int
getId()
Returns the id which has been set bysetId(int)
.This operator method creates the intersection of this volume andv
.This operator method creates the complement of this volume.This operator method creates the union of this volume andv
.This operator method creates the difference betweena
andb
.void
setId
(int id) Sets a unique identifier for this volume.
-
Method Details
-
contains
Determines if the givenpoint
lies within this object. Ifopen
istrue
, 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.- Parameters:
point
- a point in global world coordinatesopen
- consider open or closed set- Returns:
true
iffpoint
is an element of the set
-
computeIntersections
boolean computeIntersections(Line line, int which, IntersectionList list, Intersection excludeStart, Intersection excludeEnd) Computes intersections between the boundary surface of this object and the specifiedline
. The intersections are added tolist
in ascending order of distance (i.e., ofIntersection.parameter
), where theparameter
has to lie betweenline.start
andline.end
. Implementations of this method must not clear or modify the existing intersections inlist
.The parameter
which
has to be one ofIntersection.ALL
,Intersection.CLOSEST
,Intersection.ANY
. It determines if all intersections have to be added to the list, only the closest (minimal value ofIntersection.parameter
), or an arbitrary of the set of all intersections. Only in case ofALL
, 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
andexcludeEnd
. The intersection point ofexcludeStart
has to be the starting point ofline
, the intersection point ofexcludeEnd
has to be the end point ofline
. 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.- Parameters:
line
- a linewhich
- one ofIntersection.ALL
,Intersection.CLOSEST
,Intersection.ANY
, this determines which intersections have to be added tolist
list
- the intersections are added to this listexcludeStart
- intersection at start point which shall be excluded, ornull
excludeEnd
- intersection at end point which shall be excluded, ornull
- Returns:
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 ifwhich == Intersection.ALL
-
computeNormal
This method computes the unit normal vector of an intersectionis
which has been computed previously by the invocation ofcomputeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection)
on this volume.- Parameters:
is
- a previously computed intersectionnormal
- resulting unit vector is placed in here
-
computeUV
This method computes the uv-coordinates of an intersection pointis
which has been computed previously by the invocation ofcomputeIntersections(de.grogra.vecmath.geom.Line, int, de.grogra.vecmath.geom.IntersectionList, de.grogra.vecmath.geom.Intersection, de.grogra.vecmath.geom.Intersection)
on this volume.- Parameters:
is
- a previously computed intersectionuv
- resulting uv-coordinates are placed in here
-
computeTangents
This method computes the derivatives of the surface point (as function of the uv-coordinates, seecomputeUV(de.grogra.vecmath.geom.Intersection, javax.vecmath.Vector2d)
) with respect to u and v at the intersection point.- Parameters:
is
- a previously computed intersectiondpdu
- resulting derivative with respect to udpdv
- resulting derivative with respect to v
-
getExtent
Computes the extent of this volume, i.e., an axis-aligned bounding box betweenmin
andmax
.- Parameters:
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 implementations
-
boxContainsBoundary
Returnstrue
if the specifiedbox
contains (part of) the boundary surface of this volume. Otherwise, if box and boundary do not overlap, this method should returnfalse
, but may also returntrue
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.
- Parameters:
box
- bounding boxcenter
- center coordinates of boxradius
- radius of enclosing spheretemp
- has to be provided by the invoker, may be used in implementations- Returns:
true
if box contains (part of) the boundary of this volume
-
setId
void setId(int id) Sets a unique identifier for this volume.id
has to be non-negative, theid
s of all coexisting volumes should be consecutive numbers starting at zero.- Parameters:
id
- id for this volume- See Also:
-
getId
int getId()Returns the id which has been set bysetId(int)
. Identifiers are non-negative and should be consecutive starting at zero, so that they can be used as indices into arrays which associate additional information with the volumes. Small gaps in the set of used identifiers are tolerable.- Returns:
- id of this volume
-
operator$com
Volume operator$com()This operator method creates the complement of this volume.- Returns:
- the complement of this volume
- See Also:
-
operator$or
This operator method creates the union of this volume andv
.- Parameters:
v
- a volume- Returns:
- the union of this volume and
v
- See Also:
-
operator$and
This operator method creates the intersection of this volume andv
.- Parameters:
v
- a volume- Returns:
- the intersection of
a
andb
- See Also:
-
operator$sub
This operator method creates the difference betweena
andb
.- Parameters:
v
- the volume to be subtracted- Returns:
- the difference between this volume and
b
- See Also:
-