5#ifndef __IRR_AABBOX_3D_H_INCLUDED__
6#define __IRR_AABBOX_3D_H_INCLUDED__
32 aabbox3d(T minx, T miny, T minz, T maxx, T maxy, T maxz):
MinEdge(minx, miny, minz),
MaxEdge(maxx, maxy, maxz) {}
122 const T radius =
getExtent().getLength() / 2;
138 return e.
X * e.
Y * e.
Z;
145 return 2*(e.
X*e.
Y + e.
X*e.
Z + e.
Y*e.
Z);
168 edges[0].set(middle.
X + diag.
X, middle.
Y + diag.
Y, middle.
Z + diag.
Z);
169 edges[1].set(middle.
X + diag.
X, middle.
Y - diag.
Y, middle.
Z + diag.
Z);
170 edges[2].set(middle.
X + diag.
X, middle.
Y + diag.
Y, middle.
Z - diag.
Z);
171 edges[3].set(middle.
X + diag.
X, middle.
Y - diag.
Y, middle.
Z - diag.
Z);
172 edges[4].set(middle.
X - diag.
X, middle.
Y + diag.
Y, middle.
Z + diag.
Z);
173 edges[5].set(middle.
X - diag.
X, middle.
Y - diag.
Y, middle.
Z + diag.
Z);
174 edges[6].set(middle.
X - diag.
X, middle.
Y + diag.
Y, middle.
Z - diag.
Z);
175 edges[7].set(middle.
X - diag.
X, middle.
Y - diag.
Y, middle.
Z - diag.
Z);
286 if ((fabs(t.
X) > e.
X + halflength * fabs(linevect.
X)) ||
287 (fabs(t.
Y) > e.
Y + halflength * fabs(linevect.
Y)) ||
288 (fabs(t.
Z) > e.
Z + halflength * fabs(linevect.
Z)) )
291 T r = e.
Y * (T)fabs(linevect.
Z) + e.
Z * (T)fabs(linevect.
Y);
292 if (fabs(t.
Y*linevect.
Z - t.
Z*linevect.
Y) > r )
295 r = e.
X * (T)fabs(linevect.
Z) + e.
Z * (T)fabs(linevect.
X);
296 if (fabs(t.
Z*linevect.
X - t.
X*linevect.
Z) > r )
299 r = e.
X * (T)fabs(linevect.
Y) + e.
Y * (T)fabs(linevect.
X);
300 if (fabs(t.
X*linevect.
Y - t.
Y*linevect.
X) > r)
316 if (plane.
Normal.X > (T)0)
322 if (plane.
Normal.Y > (T)0)
328 if (plane.
Normal.Z > (T)0)
334 if (plane.
Normal.dotProduct(nearPoint) + plane.
D > (T)0)
335 return ISREL3D_FRONT;
337 if (plane.
Normal.dotProduct(farPoint) + plane.
D > (T)0)
338 return ISREL3D_CLIPPED;
Axis aligned bounding box in 3d dimensional space.
Definition aabbox3d.h:22
bool isPointTotalInside(const vector3d< T > &p) const
Determines if a point is within this box and not its borders.
Definition aabbox3d.h:220
void addInternalPoint(T x, T y, T z)
Adds a point to the bounding box.
Definition aabbox3d.h:93
aabbox3d(const vector3d< T > &init)
Constructor with only one point.
Definition aabbox3d.h:30
aabbox3d< T > getInterpolated(const aabbox3d< T > &other, f32 d) const
Calculates a new interpolated bounding box.
Definition aabbox3d.h:198
void addInternalPoint(const vector3d< T > &p)
Adds a point to the bounding box.
Definition aabbox3d.h:74
vector3d< f32 > MaxEdge
Definition aabbox3d.h:347
vector3d< T > getCenter() const
Get center of the bounding box.
Definition aabbox3d.h:106
void reset(const aabbox3d< T > &initValue)
Resets the bounding box.
Definition aabbox3d.h:58
bool intersectsWithBox(const aabbox3d< T > &other) const
Determines if the axis-aligned box intersects with another axis-aligned box.
Definition aabbox3d.h:260
aabbox3d(const vector3d< T > &min, const vector3d< T > &max)
Constructor with min edge and max edge.
Definition aabbox3d.h:28
vector3d< f32 > MinEdge
Definition aabbox3d.h:344
T getVolume() const
Get the volume enclosed by the box in cubed units.
Definition aabbox3d.h:135
void addInternalBox(const aabbox3d< T > &b)
Adds another bounding box.
Definition aabbox3d.h:82
bool isFullInside(const aabbox3d< T > &other) const
Check if this box is completely inside the 'other' box.
Definition aabbox3d.h:231
T getArea() const
Get the surface area of the box in squared units.
Definition aabbox3d.h:142
void repair()
Repairs the box.
Definition aabbox3d.h:180
bool operator!=(const aabbox3d< T > &other) const
Inequality operator.
Definition aabbox3d.h:42
bool isEmpty() const
Check if the box is empty.
Definition aabbox3d.h:129
EIntersectionRelation3D classifyPlaneRelation(const plane3d< T > &plane) const
Classifies a relation with a plane.
Definition aabbox3d.h:311
T getRadius() const
Get radius of the bounding sphere.
Definition aabbox3d.h:120
aabbox3d< T > intersect(const aabbox3d< T > &other) const
Returns the intersection of this box with another, if possible.
Definition aabbox3d.h:238
bool operator==(const aabbox3d< T > &other) const
Equality operator.
Definition aabbox3d.h:38
void getEdges(vector3d< T > *edges) const
Stores all 8 edges of the box into an array.
Definition aabbox3d.h:150
bool intersectsWithLine(const line3d< T > &line) const
Tests if the box intersects with a line.
Definition aabbox3d.h:269
bool intersectsWithLine(const vector3d< T > &linemiddle, const vector3d< T > &linevect, T halflength) const
Tests if the box intersects with a line.
Definition aabbox3d.h:280
vector3d< T > getExtent() const
Get extent of the box (maximal distance of two points in the box).
Definition aabbox3d.h:113
bool isPointInside(const vector3d< T > &p) const
Determines if a point is within this box.
Definition aabbox3d.h:209
aabbox3d()
Default Constructor.
Definition aabbox3d.h:26
aabbox3d(T minx, T miny, T minz, T maxx, T maxy, T maxz)
Constructor with min edge and max edge as single values, not vectors.
Definition aabbox3d.h:32
void reset(const vector3d< T > &initValue)
Resets the bounding box to a one-point box.
Definition aabbox3d.h:65
void reset(T x, T y, T z)
Resets the bounding box to a one-point box.
Definition aabbox3d.h:50
3D line between two points with intersection methods.
Definition line3d.h:19
vector3d< T > getMiddle() const
Get middle of line.
Definition line3d.h:64
T getLength() const
Get length of line.
Definition line3d.h:56
vector3d< T > getVector() const
Get vector of line.
Definition line3d.h:71
Template plane class with some intersection testing methods.
Definition plane3d.h:34
vector3d< T > Normal
Normal vector of the plane.
Definition plane3d.h:228
T D
Distance from origin.
Definition plane3d.h:231
3d vector template class with lots of operators and methods.
Definition vector3d.h:23
T X
X coordinate of the vector.
Definition vector3d.h:408
T Z
Z coordinate of the vector.
Definition vector3d.h:414
T Y
Y coordinate of the vector.
Definition vector3d.h:411
Basic classes such as vectors, planes, arrays, lists, and so on can be found in this namespace.
Definition aabbox3d.h:15
const T & max_(const T &a, const T &b)
returns maximum of two values. Own implementation to get rid of the STL (VS6 problems)
Definition irrMath.h:137
const T & min_(const T &a, const T &b)
returns minimum of two values. Own implementation to get rid of the STL (VS6 problems)
Definition irrMath.h:123
EIntersectionRelation3D
Enumeration for intersection relations of 3d objects.
Definition plane3d.h:18
aabbox3d< f32 > aabbox3df
Typedef for a f32 3d bounding box.
Definition aabbox3d.h:351
aabbox3d< s32 > aabbox3di
Typedef for an integer 3d bounding box.
Definition aabbox3d.h:353
Everything in the Irrlicht Engine can be found in this namespace.
Definition Skylicht.h:33
float f32
32 bit floating point variable.
Definition irrTypes.h:104