21 #ifdef BT_USE_DOUBLE_PRECISION 22 #define btVector3Data btVector3DoubleData 23 #define btVector3DataName "btVector3DoubleData" 25 #define btVector3Data btVector3FloatData 26 #define btVector3DataName "btVector3FloatData" 27 #endif //BT_USE_DOUBLE_PRECISION 37 #if defined(__SPU__) && defined(__CELLOS_LV2__) 43 return *((
const vec_float4*)&m_floats[0]);
47 #else //__CELLOS_LV2__ __SPU__ 48 #ifdef BT_USE_SSE // _WIN32 64 #endif //__CELLOS_LV2__ __SPU__ 88 m_floats[0] += v.m_floats[0];
89 m_floats[1] += v.m_floats[1];
90 m_floats[2] += v.m_floats[2];
98 m_floats[0] -= v.m_floats[0];
99 m_floats[1] -= v.m_floats[1];
100 m_floats[2] -= v.m_floats[2];
125 return m_floats[0] * v.m_floats[0] + m_floats[1] * v.m_floats[1] + m_floats[2] * v.m_floats[2];
151 int32_t maxIndex = absVec.maxAxis();
152 if (absVec[maxIndex] > 0) {
153 *
this /= absVec[maxIndex];
154 return *
this /=
length();
164 return *
this /=
length();
196 m_floats[1] * v.m_floats[2] - m_floats[2] * v.m_floats[1],
197 m_floats[2] * v.m_floats[0] - m_floats[0] * v.m_floats[2],
198 m_floats[0] * v.m_floats[1] - m_floats[1] * v.m_floats[0]);
203 return m_floats[0] * (v1.m_floats[1] * v2.m_floats[2] - v1.m_floats[2] * v2.m_floats[1]) + m_floats[1] * (v1.m_floats[2] * v2.m_floats[0] - v1.m_floats[0] * v2.m_floats[2]) + m_floats[2] * (v1.m_floats[0] * v2.m_floats[1] - v1.m_floats[1] * v2.m_floats[0]);
210 return m_floats[0] < m_floats[1] ? (m_floats[0] < m_floats[2] ? 0 : 2) : (m_floats[1] < m_floats[2] ? 1 : 2);
217 return m_floats[0] < m_floats[1] ? (m_floats[1] < m_floats[2] ? 2 : 1) : (m_floats[0] < m_floats[2] ? 2 : 0);
233 m_floats[0] = s * v0.m_floats[0] + rt * v1.m_floats[0];
234 m_floats[1] = s * v0.m_floats[1] + rt * v1.m_floats[1];
235 m_floats[2] = s * v0.m_floats[2] + rt * v1.m_floats[2];
245 return btVector3(m_floats[0] + (v.m_floats[0] - m_floats[0]) * t,
246 m_floats[1] + (v.m_floats[1] - m_floats[1]) * t,
247 m_floats[2] + (v.m_floats[2] - m_floats[2]) * t);
254 m_floats[0] *= v.m_floats[0];
255 m_floats[1] *= v.m_floats[1];
256 m_floats[2] *= v.m_floats[2];
291 return ((m_floats[3] == other.m_floats[3]) && (m_floats[2] == other.m_floats[2]) && (m_floats[1] == other.m_floats[1]) && (m_floats[0] == other.m_floats[0]));
296 return !(*
this == other);
304 btSetMax(m_floats[0], other.m_floats[0]);
305 btSetMax(m_floats[1], other.m_floats[1]);
306 btSetMax(m_floats[2], other.m_floats[2]);
314 btSetMin(m_floats[0], other.m_floats[0]);
315 btSetMin(m_floats[1], other.m_floats[1]);
316 btSetMin(m_floats[2], other.m_floats[2]);
330 v0->setValue(0., -
z(),
y());
331 v1->setValue(
z(), 0., -
x());
332 v2->setValue(-
y(),
x(), 0.);
367 return btVector3(v1.m_floats[0] + v2.m_floats[0], v1.m_floats[1] + v2.m_floats[1], v1.m_floats[2] + v2.m_floats[2]);
374 return btVector3(v1.m_floats[0] * v2.m_floats[0], v1.m_floats[1] * v2.m_floats[1], v1.m_floats[2] * v2.m_floats[2]);
381 return btVector3(v1.m_floats[0] - v2.m_floats[0], v1.m_floats[1] - v2.m_floats[1], v1.m_floats[2] - v2.m_floats[2]);
387 return btVector3(-v.m_floats[0], -v.m_floats[1], -v.m_floats[2]);
394 return btVector3(v.m_floats[0] * s, v.m_floats[1] * s, v.m_floats[2] * s);
416 return btVector3(v1.m_floats[0] / v2.m_floats[0], v1.m_floats[1] / v2.m_floats[1], v1.m_floats[2] / v2.m_floats[2]);
430 return v1.distance2(v2);
437 return v1.distance(v2);
457 return v1.triple(v2, v3);
467 return v1.lerp(v2, t);
472 return (v - *
this).length2();
477 return (v - *
this).length();
493 y = wAxis.cross(*
this);
495 return (o + x *
btCos(angle) + y *
btSin(angle));
521 int32_t maxIndex = -1;
523 if (m_floats[0] > maxVal) {
525 maxVal = m_floats[0];
527 if (m_floats[1] > maxVal) {
529 maxVal = m_floats[1];
531 if (m_floats[2] > maxVal) {
533 maxVal = m_floats[2];
535 if (m_floats[3] > maxVal) {
543 int32_t minIndex = -1;
545 if (m_floats[0] < minVal) {
547 minVal = m_floats[0];
549 if (m_floats[1] < minVal) {
551 minVal = m_floats[1];
553 if (m_floats[2] < minVal) {
555 minVal = m_floats[2];
557 if (m_floats[3] < minVal) {
600 #ifdef BT_USE_DOUBLE_PRECISION 601 unsigned char* dest = (
unsigned char*)&destVal;
602 unsigned char* src = (
unsigned char*)&sourceVal;
612 unsigned char* dest = (
unsigned char*)&destVal;
613 unsigned char* src = (
unsigned char*)&sourceVal;
618 #endif //BT_USE_DOUBLE_PRECISION 623 for (int32_t i = 0; i < 4; i++) {
633 for (int32_t i = 0; i < 4; i++) {
644 btScalar a = n[1] * n[1] + n[2] * n[2];
656 btScalar a = n[0] * n[0] + n[1] * n[1];
679 for (int32_t i = 0; i < 4; i++)
680 dataOut.
m_floats[i] =
float(m_floats[i]);
685 for (int32_t i = 0; i < 4; i++)
692 for (int32_t i = 0; i < 4; i++)
693 dataOut.
m_floats[i] =
double(m_floats[i]);
698 for (int32_t i = 0; i < 4; i++)
705 for (int32_t i = 0; i < 4; i++)
706 dataOut.m_floats[i] = m_floats[i];
711 for (int32_t i = 0; i < 4; i++)
712 m_floats[i] = dataIn.m_floats[i];
715 #endif //BT_VECTOR3_H SIMD_FORCE_INLINE bool operator==(const btVector3 &other) const
Definition: btVector3.h:289
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:178
SIMD_FORCE_INLINE void btSetMax(T &a, const T &b)
Definition: btMinMax.h:47
SIMD_FORCE_INLINE void serialize(struct btVector3Data &dataOut) const
SIMD_FORCE_INLINE void setZ(btScalar z)
Set the z value.
Definition: btVector3.h:271
SIMD_FORCE_INLINE btVector3 lerp(const btVector3 &v, const btScalar &t) const
Return the linear interpolation between this and another vector.
Definition: btVector3.h:243
SIMD_FORCE_INLINE void btSetMin(T &a, const T &b)
Definition: btMinMax.h:39
SIMD_FORCE_INLINE btScalar btDistance(const btVector3 &v1, const btVector3 &v2)
Return the distance between two vectors.
Definition: btVector3.h:435
Definition: btVector3.h:672
SIMD_FORCE_INLINE int32_t minAxis() const
Return the axis with the smallest value Note return values are 0,1,2 for x, y, or z...
Definition: btVector3.h:208
SIMD_FORCE_INLINE btScalar dot(const btVector3 &v) const
Return the dot product.
Definition: btVector3.h:123
#define SIMD_EPSILON
Definition: btScalar.h:320
SIMD_FORCE_INLINE void serializeFloat(struct btVector3FloatData &dataOut) const
Definition: btVector3.h:676
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
Definition: btVector3.h:162
SIMD_FORCE_INLINE void setInterpolate3(const btVector3 &v0, const btVector3 &v1, btScalar rt)
Definition: btVector3.h:230
SIMD_FORCE_INLINE const btScalar & x() const
Return the x value.
Definition: btVector3.h:275
SIMD_FORCE_INLINE void setY(btScalar y)
Set the y value.
Definition: btVector3.h:269
SIMD_FORCE_INLINE void setValue(const btScalar &x, const btScalar &y, const btScalar &z, const btScalar &w)
Set x,y,z and zero w.
Definition: btVector3.h:588
void setZero()
Definition: btVector3.h:335
SIMD_FORCE_INLINE void btUnSwapVector3Endian(btVector3 &vector)
btUnSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization ...
Definition: btVector3.h:629
SIMD_FORCE_INLINE btScalar btAcos(btScalar x)
Definition: btScalar.h:282
SIMD_FORCE_INLINE void serializeDouble(struct btVector3DoubleData &dataOut) const
Definition: btVector3.h:689
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
Definition: btVector3.h:35
SIMD_FORCE_INLINE void deSerializeFloat(const struct btVector3FloatData &dataIn)
Definition: btVector3.h:683
SIMD_FORCE_INLINE btVector3 rotate(const btVector3 &wAxis, const btScalar angle) const
Return a rotated version of this vector.
Definition: btVector3.h:485
SIMD_FORCE_INLINE void setMin(const btVector3 &other)
Set each element to the min of the current values and the values of another btVector3.
Definition: btVector3.h:312
SIMD_FORCE_INLINE int32_t maxAxis4() const
Definition: btVector3.h:519
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
Definition: btScalar.h:278
SIMD_FORCE_INLINE void setX(btScalar x)
Set the x value.
Definition: btVector3.h:267
#define SIMDSQRT12
Definition: btScalar.h:312
SIMD_FORCE_INLINE btScalar btDistance2(const btVector3 &v1, const btVector3 &v2)
Return the distance squared between two vectors.
Definition: btVector3.h:428
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:208
SIMD_FORCE_INLINE btVector4(const btScalar &x, const btScalar &y, const btScalar &z, const btScalar &w)
Definition: btVector3.h:502
#define btRecipSqrt(x)
Definition: btScalar.h:314
SIMD_FORCE_INLINE btScalar btCos(btScalar x)
Definition: btScalar.h:279
SIMD_FORCE_INLINE btVector3 absolute() const
Return a vector will the absolute values of each element.
Definition: btVector3.h:184
SIMD_FORCE_INLINE btVector3 & operator*=(const btScalar &s)
Scale the vector.
Definition: btVector3.h:105
SIMD_FORCE_INLINE void setMax(const btVector3 &other)
Set each element to the max of the current values and the values of another btVector3.
Definition: btVector3.h:302
SIMD_FORCE_INLINE const btScalar & y() const
Return the y value.
Definition: btVector3.h:277
float m_floats[4]
Definition: btVector3.h:669
Definition: btVector3.h:668
SIMD_FORCE_INLINE btVector3 operator*(const btVector3 &v1, const btVector3 &v2)
Return the elementwise product of two vectors.
Definition: btVector3.h:372
SIMD_FORCE_INLINE int32_t minAxis4() const
Definition: btVector3.h:541
SIMD_FORCE_INLINE int32_t maxAxis() const
Return the axis with the largest value Note return values are 0,1,2 for x, y, or z.
Definition: btVector3.h:215
SIMD_FORCE_INLINE btVector4 absolute4() const
Definition: btVector3.h:508
SIMD_FORCE_INLINE void btSwapScalarEndian(const btScalar &sourceVal, btScalar &destVal)
btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization ...
Definition: btVector3.h:598
SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3 &sourceVec, btVector3 &destVec)
btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization ...
Definition: btVector3.h:621
SIMD_FORCE_INLINE bool fuzzyZero() const
Definition: btVector3.h:345
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
Definition: btVector3.h:177
SIMD_FORCE_INLINE btScalar btSin(btScalar x)
Definition: btScalar.h:280
SIMD_FORCE_INLINE btVector3 & operator+=(const btVector3 &v)
Add a vector to this one.
Definition: btVector3.h:85
SIMD_FORCE_INLINE btVector3 & operator/=(const btScalar &s)
Inversely scale the vector.
Definition: btVector3.h:115
void getSkewSymmetricMatrix(btVector3 *v0, btVector3 *v1, btVector3 *v2) const
Definition: btVector3.h:328
SIMD_FORCE_INLINE btVector3 btCross(const btVector3 &v1, const btVector3 &v2)
Return the cross product of two vectors.
Definition: btVector3.h:449
SIMD_FORCE_INLINE btVector3 operator-(const btVector3 &v1, const btVector3 &v2)
Return the difference between two vectors.
Definition: btVector3.h:379
SIMD_FORCE_INLINE btVector3 operator+(const btVector3 &v1, const btVector3 &v2)
Return the sum of two vectors (Point symantics)
Definition: btVector3.h:365
SIMD_FORCE_INLINE void deSerialize(const struct btVector3Data &dataIn)
Definition: btVector3.h:709
double m_floats[4]
Definition: btVector3.h:673
#define btFullAssert(x)
Definition: btScalar.h:192
SIMD_FORCE_INLINE btScalar btTriple(const btVector3 &v1, const btVector3 &v2, const btVector3 &v3)
Definition: btVector3.h:455
SIMD_FORCE_INLINE int32_t closestAxis() const
Definition: btVector3.h:225
SIMD_FORCE_INLINE btVector3 & safeNormalize()
Definition: btVector3.h:148
SIMD_FORCE_INLINE btVector3 & operator-=(const btVector3 &v)
Subtract a vector from this one.
Definition: btVector3.h:96
SIMD_FORCE_INLINE btVector3 normalized() const
Return a normalized version of this vector.
Definition: btVector3.h:480
btScalar getW() const
Definition: btVector3.h:517
#define SIMD_FORCE_INLINE
Definition: btScalar.h:173
SIMD_FORCE_INLINE btVector3 operator/(const btVector3 &v, const btScalar &s)
Return the vector inversely scaled by s.
Definition: btVector3.h:406
SIMD_FORCE_INLINE void setValue(const btScalar &x, const btScalar &y, const btScalar &z)
Definition: btVector3.h:320
SIMD_FORCE_INLINE btVector4()
Definition: btVector3.h:500
SIMD_FORCE_INLINE btScalar length2() const
Return the length of the vector squared.
Definition: btVector3.h:129
SIMD_FORCE_INLINE btScalar distance(const btVector3 &v) const
Return the distance between the ends of this and another vector This is symantically treating the vec...
Definition: btVector3.h:475
SIMD_FORCE_INLINE btScalar length() const
Return the length of the vector.
Definition: btVector3.h:135
SIMD_FORCE_INLINE btScalar triple(const btVector3 &v1, const btVector3 &v2) const
Definition: btVector3.h:201
SIMD_FORCE_INLINE void deSerializeDouble(const struct btVector3DoubleData &dataIn)
Definition: btVector3.h:696
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition: btVector3.h:279
SIMD_FORCE_INLINE bool operator!=(const btVector3 &other) const
Definition: btVector3.h:294
#define BT_LARGE_FLOAT
Definition: btScalar.h:210
SIMD_FORCE_INLINE void btPlaneSpace1(const T &n, T &p, T &q)
Definition: btVector3.h:640
SIMD_FORCE_INLINE void setW(btScalar w)
Set the w value.
Definition: btVector3.h:273
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition: btVector3.h:281
SIMD_FORCE_INLINE btScalar btAngle(const btVector3 &v1, const btVector3 &v2)
Return the angle between two vectors.
Definition: btVector3.h:442
#define btVector3Data
Definition: btVector3.h:25
SIMD_FORCE_INLINE const btScalar & getZ() const
Return the z value.
Definition: btVector3.h:265
SIMD_FORCE_INLINE btScalar btSqrt(btScalar y)
Definition: btScalar.h:258
SIMD_FORCE_INLINE const btScalar & getY() const
Return the y value.
Definition: btVector3.h:263
SIMD_FORCE_INLINE int32_t closestAxis4() const
Definition: btVector3.h:564
SIMD_FORCE_INLINE bool isZero() const
Definition: btVector3.h:340
SIMD_FORCE_INLINE btScalar distance2(const btVector3 &v) const
Return the distance squared between the ends of this and another vector This is symantically treating...
Definition: btVector3.h:470
Definition: btVector3.h:498
SIMD_FORCE_INLINE btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
Definition: btVector3.h:193
SIMD_FORCE_INLINE int32_t furthestAxis() const
Definition: btVector3.h:220
SIMD_FORCE_INLINE btScalar btDot(const btVector3 &v1, const btVector3 &v2)
Return the dot product between two vectors.
Definition: btVector3.h:421
SIMD_FORCE_INLINE const btScalar & getX() const
Return the x value.
Definition: btVector3.h:261