27 aabbMin = aabbMin + expansionMin;
28 aabbMax = aabbMax + expansionMax;
36 overlap = (aabbMin1.
getX() > point.
getX() || aabbMax1.
getX() < point.
getX()) ?
false : overlap;
37 overlap = (aabbMin1.
getZ() > point.
getZ() || aabbMax1.
getZ() < point.
getZ()) ?
false : overlap;
38 overlap = (aabbMin1.
getY() > point.
getY() || aabbMax1.
getY() < point.
getY()) ?
false : overlap;
47 overlap = (aabbMin1.
getX() > aabbMax2.
getX() || aabbMax1.
getX() < aabbMin2.
getX()) ?
false : overlap;
48 overlap = (aabbMin1.
getZ() > aabbMax2.
getZ() || aabbMax1.
getZ() < aabbMin2.
getZ()) ?
false : overlap;
49 overlap = (aabbMin1.
getY() > aabbMax2.
getY() || aabbMax1.
getY() < aabbMin2.
getY()) ?
false : overlap;
61 if (
btMin(
btMin(p1[0], p2[0]), p3[0]) > aabbMax[0])
return false;
62 if (
btMax(
btMax(p1[0], p2[0]), p3[0]) < aabbMin[0])
return false;
64 if (
btMin(
btMin(p1[2], p2[2]), p3[2]) > aabbMax[2])
return false;
65 if (
btMax(
btMax(p1[2], p2[2]), p3[2]) < aabbMin[2])
return false;
67 if (
btMin(
btMin(p1[1], p2[1]), p3[1]) > aabbMax[1])
return false;
68 if (
btMax(
btMax(p1[1], p2[1]), p3[1]) < aabbMin[1])
return false;
74 return (p.
getX() < -halfExtent.
getX() ? 0x01 : 0x0) |
75 (p.
getX() > halfExtent.
getX() ? 0x08 : 0x0) |
76 (p.
getY() < -halfExtent.
getY() ? 0x02 : 0x0) |
77 (p.
getY() > halfExtent.
getY() ? 0x10 : 0x0) |
78 (p.
getZ() < -halfExtent.
getZ() ? 0x4 : 0x0) |
79 (p.
getZ() > halfExtent.
getZ() ? 0x20 : 0x0);
84 const unsigned int raySign[3],
90 btScalar tmax, tymin, tymax, tzmin, tzmax;
91 tmin = (
bounds[raySign[0]].getX() - rayFrom.
getX()) * rayInvDirection.
getX();
92 tmax = (
bounds[1 - raySign[0]].getX() - rayFrom.
getX()) * rayInvDirection.
getX();
93 tymin = (
bounds[raySign[1]].getY() - rayFrom.
getY()) * rayInvDirection.
getY();
94 tymax = (
bounds[1 - raySign[1]].getY() - rayFrom.
getY()) * rayInvDirection.
getY();
96 if ((tmin > tymax) || (tymin > tmax))
105 tzmin = (
bounds[raySign[2]].getZ() - rayFrom.
getZ()) * rayInvDirection.
getZ();
106 tzmax = (
bounds[1 - raySign[2]].getZ() - rayFrom.
getZ()) * rayInvDirection.
getZ();
108 if ((tmin > tzmax) || (tzmin > tmax))
114 return ((tmin < lambda_max) && (tmax > lambda_min));
127 int sourceOutcode =
btOutcode(source, aabbHalfExtent);
128 int targetOutcode =
btOutcode(target, aabbHalfExtent);
129 if ((sourceOutcode & targetOutcode) == 0x0)
139 for (
int j = 0; j < 2; j++)
141 for (i = 0; i != 3; ++i)
143 if (sourceOutcode & bit)
145 btScalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i];
146 if (lambda_enter <= lambda)
148 lambda_enter = lambda;
150 hitNormal[i] = normSign;
153 else if (targetOutcode & bit)
155 btScalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i];
162 if (lambda_enter <= lambda_exit)
164 param = lambda_enter;
177 btVector3 extent = halfExtentsWithMargin.
dot3(abs_b[0], abs_b[1], abs_b[2]);
178 aabbMinOut = center - extent;
179 aabbMaxOut = center + extent;
188 localHalfExtents +=
btVector3(margin, margin, margin);
193 btVector3 extent = localHalfExtents.
dot3(abs_b[0], abs_b[1], abs_b[2]);
194 aabbMinOut = center - extent;
195 aabbMaxOut = center + extent;
198#define USE_BANCHLESS 1
203 return static_cast<unsigned int>(
btSelect((
unsigned)((aabbMin1[0] <= aabbMax2[0]) & (aabbMax1[0] >= aabbMin2[0]) & (aabbMin1[2] <= aabbMax2[2]) & (aabbMax1[2] >= aabbMin2[2]) & (aabbMin1[1] <= aabbMax2[1]) & (aabbMax1[1] >= aabbMin2[1])),
210 overlap = (aabbMin1[0] > aabbMax2[0] || aabbMax1[0] < aabbMin2[0]) ?
false : overlap;
211 overlap = (aabbMin1[2] > aabbMax2[2] || aabbMax1[2] < aabbMin2[2]) ?
false : overlap;
212 overlap = (aabbMin1[1] > aabbMax2[1] || aabbMax1[1] < aabbMin2[1]) ?
false : overlap;
bool TestPointAgainstAabb2(const btVector3 &aabbMin1, const btVector3 &aabbMax1, const btVector3 &point)
conservative test for overlap between two aabbs
bool btRayAabb(const btVector3 &rayFrom, const btVector3 &rayTo, const btVector3 &aabbMin, const btVector3 &aabbMax, btScalar ¶m, btVector3 &normal)
int btOutcode(const btVector3 &p, const btVector3 &halfExtent)
bool TestAabbAgainstAabb2(const btVector3 &aabbMin1, const btVector3 &aabbMax1, const btVector3 &aabbMin2, const btVector3 &aabbMax2)
conservative test for overlap between two aabbs
bool btRayAabb2(const btVector3 &rayFrom, const btVector3 &rayInvDirection, const unsigned int raySign[3], const btVector3 bounds[2], btScalar &tmin, btScalar lambda_min, btScalar lambda_max)
void btTransformAabb(const btVector3 &halfExtents, btScalar margin, const btTransform &t, btVector3 &aabbMinOut, btVector3 &aabbMaxOut)
void AabbExpand(btVector3 &aabbMin, btVector3 &aabbMax, const btVector3 &expansionMin, const btVector3 &expansionMax)
unsigned testQuantizedAabbAgainstQuantizedAabb(const unsigned short int *aabbMin1, const unsigned short int *aabbMax1, const unsigned short int *aabbMin2, const unsigned short int *aabbMax2)
bool TestTriangleAgainstAabb2(const btVector3 *vertices, const btVector3 &aabbMin, const btVector3 &aabbMax)
conservative test for overlap between triangle and aabb
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
void btSetMin(T &a, const T &b)
const T & btMax(const T &a, const T &b)
const T & btMin(const T &a, const T &b)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
unsigned btSelect(unsigned condition, unsigned valueIfConditionNonZero, unsigned valueIfConditionZero)
btSelect avoids branches, which makes performance much better for consoles like Playstation 3 and XBo...
#define SIMD_FORCE_INLINE
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
btMatrix3x3 absolute() const
Return the matrix with all values non negative.
btVector3 can be used to represent 3D points and vectors.
const btScalar & getZ() const
Return the z value.
btVector3 dot3(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2) const
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
const btScalar & getY() const
Return the y value.
const btScalar & getX() const
Return the x value.