29 #ifndef __BV_BOUNDS_H__
30 #define __BV_BOUNDS_H__
169 assert(
b[1][0] -
b[0][0] > a.
b[1][0] - a.
b[0][0] &&
170 b[1][1] -
b[0][1] > a.
b[1][1] - a.
b[0][1] &&
171 b[1][2] -
b[0][2] > a.
b[1][2] - a.
b[0][2] );
173 idVec3(
b[1][0] + a.
b[0][0],
b[1][1] + a.
b[0][1],
b[1][2] + a.
b[0][2] ) );
177 assert(
b[1][0] -
b[0][0] > a.
b[1][0] - a.
b[0][0] &&
178 b[1][1] -
b[0][1] > a.
b[1][1] - a.
b[0][1] &&
179 b[1][2] -
b[0][2] > a.
b[1][2] - a.
b[0][2] );
186 return (
b[0].
Compare( a.
b[0] ) &&
b[1].Compare( a.
b[1] ) );
190 return (
b[0].
Compare( a.
b[0], epsilon ) &&
b[1].Compare( a.
b[1], epsilon ) );
207 b[0][0] =
b[0][1] =
b[0][2] =
208 b[1][0] =
b[1][1] =
b[1][2] = 0;
212 return idVec3( (
b[1][0] +
b[0][0] ) * 0.5
f, (
b[1][1] +
b[0][1] ) * 0.5f, (
b[1][2] +
b[0][2] ) * 0.5f );
216 if (
b[0][0] >=
b[1][0] ||
b[0][1] >=
b[1][1] ||
b[0][2] >=
b[1][2] ) {
219 return ( (
b[1][0] -
b[0][0] ) * (
b[1][1] -
b[0][1] ) * (
b[1][2] -
b[0][2] ) );
223 return b[0][0] >
b[1][0];
227 bool expanded =
false;
228 if ( v[0] <
b[0][0]) {
232 if ( v[0] >
b[1][0]) {
236 if ( v[1] <
b[0][1] ) {
240 if ( v[1] >
b[1][1]) {
244 if ( v[2] <
b[0][2] ) {
248 if ( v[2] >
b[1][2]) {
256 bool expanded =
false;
257 if ( a.
b[0][0] <
b[0][0] ) {
261 if ( a.
b[0][1] <
b[0][1] ) {
265 if ( a.
b[0][2] <
b[0][2] ) {
269 if ( a.
b[1][0] >
b[1][0] ) {
273 if ( a.
b[1][1] >
b[1][1] ) {
277 if ( a.
b[1][2] >
b[1][2] ) {
286 n.
b[0][0] = ( a.
b[0][0] >
b[0][0] ) ? a.
b[0][0] :
b[0][0];
287 n.
b[0][1] = ( a.
b[0][1] >
b[0][1] ) ? a.
b[0][1] :
b[0][1];
288 n.
b[0][2] = ( a.
b[0][2] >
b[0][2] ) ? a.
b[0][2] :
b[0][2];
289 n.
b[1][0] = ( a.
b[1][0] <
b[1][0] ) ? a.
b[1][0] :
b[1][0];
290 n.
b[1][1] = ( a.
b[1][1] <
b[1][1] ) ? a.
b[1][1] :
b[1][1];
291 n.
b[1][2] = ( a.
b[1][2] <
b[1][2] ) ? a.
b[1][2] :
b[1][2];
296 if ( a.
b[0][0] >
b[0][0] ) {
299 if ( a.
b[0][1] >
b[0][1] ) {
302 if ( a.
b[0][2] >
b[0][2] ) {
305 if ( a.
b[1][0] <
b[1][0] ) {
308 if ( a.
b[1][1] <
b[1][1] ) {
311 if ( a.
b[1][2] <
b[1][2] ) {
319 idVec3(
b[1][0] + d,
b[1][1] + d,
b[1][2] + d ) );
333 return idBounds(
b[0] + translation,
b[1] + translation );
354 if ( p[0] <
b[0][0] || p[1] <
b[0][1] || p[2] <
b[0][2]
355 || p[0] >
b[1][0] || p[1] >
b[1][1] || p[2] >
b[1][2] ) {
362 if ( a.
b[1][0] <
b[0][0] || a.
b[1][1] <
b[0][1] || a.
b[1][2] <
b[0][2]
363 || a.
b[0][0] >
b[1][0] || a.
b[0][1] >
b[1][1] || a.
b[0][2] >
b[1][2] ) {
380 center = (
b[0] +
b[1] ) * 0.5
f;
381 extents =
b[1] - center;
396 center = (
b[0] +
b[1] ) * 0.5
f;
397 extents =
b[1] - center;
398 center = origin + center * axis;
idBounds & TranslateSelf(const idVec3 &translation)
GLsizei const GLfloat * points
const idVec3 & GetOrigin(void) const
bool AddBounds(const idBounds &a)
static const float INFINITY
assert(prefInfo.fullscreenBtn)
idVec3 GetCenter(void) const
bool operator!=(const idBounds &a) const
idBounds & RotateSelf(const idMat3 &rotation)
idBounds operator-(const idBounds &a) const
idBounds & IntersectSelf(const idBounds &a)
void FromPointRotation(const idVec3 &point, const idRotation &rotation)
bool RayIntersection(const idVec3 &start, const idVec3 &dir, float &scale) const
GLenum GLenum GLenum GLenum GLenum scale
const idVec3 & operator[](const int index) const
idBounds operator*(const idMat3 &r) const
float GetVolume(void) const
float GetRadius(void) const
void FromBoundsRotation(const idBounds &bounds, const idVec3 &origin, const idMat3 &axis, const idRotation &rotation)
bool Compare(const idBounds &a) const
idBounds & operator+=(const idVec3 &t)
idBounds & operator-=(const idBounds &a)
void FromBoundsTranslation(const idBounds &bounds, const idVec3 &origin, const idMat3 &axis, const idVec3 &translation)
bool AddPoint(const idVec3 &v)
idBounds Translate(const idVec3 &translation) const
idVec3 vec3_origin(0.0f, 0.0f, 0.0f)
void FromPointTranslation(const idVec3 &point, const idVec3 &translation)
static float Fabs(float f)
float PlaneDistance(const idPlane &plane) const
idSphere ToSphere(void) const
void FromTransformedBounds(const idBounds &bounds, const idVec3 &origin, const idMat3 &axis)
idBounds Rotate(const idMat3 &rotation) const
GLubyte GLubyte GLubyte a
bool operator==(const idBounds &a) const
idBounds Expand(const float d) const
void SetOrigin(const idVec3 &o)
GLdouble GLdouble GLdouble r
bool LineIntersection(const idVec3 &start, const idVec3 &end) const
bool IsCleared(void) const
bool IntersectsBounds(const idBounds &a) const
idBounds operator+(const idVec3 &t) const
void SetRadius(const float r)
void AxisProjection(const idVec3 &dir, float &min, float &max) const
void ToPoints(idVec3 points[8]) const
idBounds & ExpandSelf(const float d)
int PlaneSide(const idPlane &plane, const float epsilon=ON_EPSILON) const
void FromPoints(const idVec3 *points, const int numPoints)
bool ContainsPoint(const idVec3 &p) const
idBounds Intersect(const idBounds &a) const
idBounds & operator*=(const idMat3 &r)