[DEV] update compile without bullet

This commit is contained in:
Edouard DUPIN 2015-05-27 21:21:29 +02:00
parent b7982f553a
commit 500e2ebfd6
2 changed files with 57 additions and 80 deletions

View File

@ -235,7 +235,15 @@ namespace etk {
* @brief Return the length of the vector * @brief Return the length of the vector
*/ */
btScalar length() const { btScalar length() const {
return btSqrt(length2()); #ifdef ETK_BUILD_LINEARMATH
return btSqrt(length2());
#else
#if __CPP_VERSION__ >= 2011
return std::sqrt(length2());
#else
return sqrt(length2());
#endif
#endif
} }
/** /**
* @brief Return the distance squared between the ends of this and another vector * @brief Return the distance squared between the ends of this and another vector

View File

@ -31,8 +31,7 @@ namespace etk {
/** /**
* @brief No initialization constructor (faster ...) * @brief No initialization constructor (faster ...)
*/ */
Vector4D() Vector4D() {
{
#ifdef DEBUG #ifdef DEBUG
// in debug mode we set supid value to prevent forget of the inits ... // in debug mode we set supid value to prevent forget of the inits ...
m_floats[0] = (T)34673363; m_floats[0] = (T)34673363;
@ -47,8 +46,7 @@ namespace etk {
* @param y Y value * @param y Y value
* @param z Z value * @param z Z value
*/ */
Vector4D(const T& _x, const T& _y, const T& _z, const T& _w) Vector4D(const T& _x, const T& _y, const T& _z, const T& _w) {
{
m_floats[0] = _x; m_floats[0] = _x;
m_floats[1] = _y; m_floats[1] = _y;
m_floats[2] = _z; m_floats[2] = _z;
@ -59,16 +57,14 @@ namespace etk {
* @brief Add a vector to this one * @brief Add a vector to this one
* @param The vector to add to this one * @param The vector to add to this one
*/ */
Vector4D<T>& operator+=(const Vector4D<T>& v) Vector4D<T>& operator+=(const Vector4D<T>& v) {
{
m_floats[0] += v.m_floats[0]; m_floats[0] += v.m_floats[0];
m_floats[1] += v.m_floats[1]; m_floats[1] += v.m_floats[1];
m_floats[2] += v.m_floats[2]; m_floats[2] += v.m_floats[2];
m_floats[3] += v.m_floats[3]; m_floats[3] += v.m_floats[3];
return *this; return *this;
} }
Vector4D<T> operator+(const Vector4D<T>& v) Vector4D<T> operator+(const Vector4D<T>& v) {
{
return Vector4D<T>(m_floats[0] + v.m_floats[0], return Vector4D<T>(m_floats[0] + v.m_floats[0],
m_floats[1] + v.m_floats[1], m_floats[1] + v.m_floats[1],
m_floats[2] + v.m_floats[2], m_floats[2] + v.m_floats[2],
@ -80,16 +76,14 @@ namespace etk {
* @brief Subtract a vector from this one * @brief Subtract a vector from this one
* @param The vector to subtract * @param The vector to subtract
*/ */
Vector4D<T>& operator-=(const Vector4D<T>& v) Vector4D<T>& operator-=(const Vector4D<T>& v) {
{
m_floats[0] -= v.m_floats[0]; m_floats[0] -= v.m_floats[0];
m_floats[1] -= v.m_floats[1]; m_floats[1] -= v.m_floats[1];
m_floats[2] -= v.m_floats[2]; m_floats[2] -= v.m_floats[2];
m_floats[3] -= v.m_floats[3]; m_floats[3] -= v.m_floats[3];
return *this; return *this;
} }
Vector4D<T> operator-(const Vector4D<T>& v) Vector4D<T> operator-(const Vector4D<T>& v) {
{
return Vector4D<T>(m_floats[0] - v.m_floats[0], return Vector4D<T>(m_floats[0] - v.m_floats[0],
m_floats[1] - v.m_floats[1], m_floats[1] - v.m_floats[1],
m_floats[2] - v.m_floats[2], m_floats[2] - v.m_floats[2],
@ -100,16 +94,14 @@ namespace etk {
* @brief Scale the vector * @brief Scale the vector
* @param s Scale factor * @param s Scale factor
*/ */
Vector4D<T>& operator*=(const T& s) Vector4D<T>& operator*=(const T& s) {
{
m_floats[0] *= s; m_floats[0] *= s;
m_floats[1] *= s; m_floats[1] *= s;
m_floats[2] *= s; m_floats[2] *= s;
m_floats[3] *= s; m_floats[3] *= s;
return *this; return *this;
} }
Vector4D<T> operator*(const T& s) Vector4D<T> operator*(const T& s) {
{
return Vector4D<T>(m_floats[0] * s, return Vector4D<T>(m_floats[0] * s,
m_floats[1] * s, m_floats[1] * s,
m_floats[2] * s, m_floats[2] * s,
@ -120,15 +112,13 @@ namespace etk {
* @brief Inversely scale the vector * @brief Inversely scale the vector
* @param s Scale factor to divide by * @param s Scale factor to divide by
*/ */
Vector4D<T>& operator/=(const Vector4D<T>& s) Vector4D<T>& operator/=(const Vector4D<T>& s) {
{
if (0!=s) { if (0!=s) {
return *this *= 1.0f / s; return *this *= 1.0f / s;
} }
return *this; return *this;
} }
Vector4D<T>& operator/=(const T& s) Vector4D<T>& operator/=(const T& s) {
{
if (0!=s) { if (0!=s) {
m_floats[0]/=s; m_floats[0]/=s;
m_floats[1]/=s; m_floats[1]/=s;
@ -143,8 +133,7 @@ namespace etk {
* @brief Return the dot product * @brief Return the dot product
* @param v The other vector in the dot product * @param v The other vector in the dot product
*/ */
float dot(const Vector4D<T>& v) const float dot(const Vector4D<T>& v) const {
{
return m_floats[0] * v.m_floats[0] + return m_floats[0] * v.m_floats[0] +
m_floats[1] * v.m_floats[1] + m_floats[1] * v.m_floats[1] +
m_floats[2] * v.m_floats[2] + m_floats[2] * v.m_floats[2] +
@ -154,25 +143,30 @@ namespace etk {
/** /**
* @brief Return the length of the vector squared * @brief Return the length of the vector squared
*/ */
float length2() const float length2() const {
{
return dot(*this); return dot(*this);
} }
/** /**
* @brief Return the length of the vector * @brief Return the length of the vector
*/ */
float length() const float length() const {
{ #ifdef ETK_BUILD_LINEARMATH
return btSqrt(length2()); return btSqrt(length2());
#else
#if __CPP_VERSION__ >= 2011
return std::sqrt(length2());
#else
return sqrt(length2());
#endif
#endif
} }
/** /**
* @brief Return the distance squared between the ends of this and another vector * @brief Return the distance squared between the ends of this and another vector
* This is symantically treating the vector like a point * This is symantically treating the vector like a point
*/ */
float distance2(const Vector4D<T>& v) const float distance2(const Vector4D<T>& v) const {
{
return (v - *this).length2(); return (v - *this).length2();
} }
@ -180,13 +174,11 @@ namespace etk {
* @brief Return the distance between the ends of this and another vector * @brief Return the distance between the ends of this and another vector
* This is symantically treating the vector like a point * This is symantically treating the vector like a point
*/ */
float distance(const Vector4D<T>& v) const float distance(const Vector4D<T>& v) const {
{
return (v - *this).length(); return (v - *this).length();
} }
/* /*
Vector4D<T>& safeNormalize() Vector4D<T>& safeNormalize() {
{
Vector4D<T> absVec = this->absolute(); Vector4D<T> absVec = this->absolute();
int maxIndex = absVec.maxAxis(); int maxIndex = absVec.maxAxis();
if (absVec[maxIndex]>0) if (absVec[maxIndex]>0)
@ -202,16 +194,14 @@ namespace etk {
* @brief Normalize this vector * @brief Normalize this vector
* x^2 + y^2 + z^2 = 1 * x^2 + y^2 + z^2 = 1
*/ */
Vector4D<T>& normalize() Vector4D<T>& normalize() {
{
return *this /= length(); return *this /= length();
} }
/** /**
* @brief Return a normalized version of this vector * @brief Return a normalized version of this vector
*/ */
Vector4D<T> normalized() const Vector4D<T> normalized() const {
{
return *this / length(); return *this / length();
} }
@ -221,8 +211,7 @@ namespace etk {
* @param angle The angle to rotate by * @param angle The angle to rotate by
*/ */
/* /*
Vector4D<T> rotate( const Vector3D<T>& wAxis, const btScalar angle ) const Vector4D<T> rotate( const Vector3D<T>& wAxis, const btScalar angle ) const {
{
Vector4D<T> o = wAxis * wAxis.dot( *this ); Vector4D<T> o = wAxis * wAxis.dot( *this );
Vector4D<T> _x = *this - o; Vector4D<T> _x = *this - o;
Vector4D<T> _y; Vector4D<T> _y;
@ -235,8 +224,7 @@ namespace etk {
* @param v The other vector * @param v The other vector
*/ */
/* /*
btScalar angle(const Vector3D<T>& v) const btScalar angle(const Vector3D<T>& v) const {
{
btScalar s = sqrtf(length2() * v.length2()); btScalar s = sqrtf(length2() * v.length2());
if (0!=s) { if (0!=s) {
return acosf(dot(v) / s); return acosf(dot(v) / s);
@ -247,8 +235,7 @@ namespace etk {
/** /**
* @brief Return a vector will the absolute values of each element * @brief Return a vector will the absolute values of each element
*/ */
Vector4D<T> absolute() const Vector4D<T> absolute() const {
{
return Vector4D<T>( abs(m_floats[0]), return Vector4D<T>( abs(m_floats[0]),
abs(m_floats[1]), abs(m_floats[1]),
abs(m_floats[2]), abs(m_floats[2]),
@ -260,15 +247,13 @@ namespace etk {
* @param v The other vector * @param v The other vector
*/ */
/* /*
Vector4D<T> cross(const Vector4D<T>& v) const Vector4D<T> cross(const Vector4D<T>& v) const {
{
return Vector4D<T>(m_floats[1] * v.m_floats[2] - m_floats[2] * v.m_floats[1], return Vector4D<T>(m_floats[1] * v.m_floats[2] - m_floats[2] * v.m_floats[1],
m_floats[2] * v.m_floats[0] - m_floats[0] * v.m_floats[2], m_floats[2] * v.m_floats[0] - m_floats[0] * v.m_floats[2],
m_floats[0] * v.m_floats[1] - m_floats[1] * v.m_floats[0]); m_floats[0] * v.m_floats[1] - m_floats[1] * v.m_floats[0]);
} }
T triple(const Vector4D<T>& v1, const Vector4D<T>& v2) const T triple(const Vector4D<T>& v1, const Vector4D<T>& v2) const {
{
return m_floats[0] * (v1.m_floats[1] * v2.m_floats[2] - v1.m_floats[2] * v2.m_floats[1]) 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[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]); + m_floats[2] * (v1.m_floats[0] * v2.m_floats[1] - v1.m_floats[1] * v2.m_floats[0]);
@ -279,8 +264,7 @@ namespace etk {
* Note return values are 0,1,2 for x, y, or z * Note return values are 0,1,2 for x, y, or z
*/ */
/* /*
int32_t minAxis() const int32_t minAxis() const {
{
return m_floats[0] < m_floats[1] ? (m_floats[0] <m_floats[2] ? 0 : 2) : (m_floats[1] <m_floats[2] ? 1 : 2); return m_floats[0] < m_floats[1] ? (m_floats[0] <m_floats[2] ? 0 : 2) : (m_floats[1] <m_floats[2] ? 1 : 2);
} }
*/ */
@ -289,23 +273,19 @@ namespace etk {
* Note return values are 0,1,2 for x, y, or z * Note return values are 0,1,2 for x, y, or z
*/ */
/* /*
int32_t maxAxis() const int32_t maxAxis() const {
{
return m_floats[0] < m_floats[1] ? (m_floats[1] <m_floats[2] ? 2 : 1) : (m_floats[0] <m_floats[2] ? 2 : 0); return m_floats[0] < m_floats[1] ? (m_floats[1] <m_floats[2] ? 2 : 1) : (m_floats[0] <m_floats[2] ? 2 : 0);
} }
int32_t furthestAxis() const int32_t furthestAxis() const {
{
return absolute().minAxis(); return absolute().minAxis();
} }
int32_t closestAxis() const int32_t closestAxis() const {
{
return absolute().maxAxis(); return absolute().maxAxis();
} }
void setInterpolate3(const Vector4D<T>& v0, const Vector4D<T>& v1, T rt) void setInterpolate3(const Vector4D<T>& v0, const Vector4D<T>& v1, T rt) {
{
btScalar s = 1 - rt; btScalar s = 1 - rt;
m_floats[0] = s * v0.m_floats[0] + rt * v1.m_floats[0]; m_floats[0] = s * v0.m_floats[0] + rt * v1.m_floats[0];
m_floats[1] = s * v0.m_floats[1] + rt * v1.m_floats[1]; m_floats[1] = s * v0.m_floats[1] + rt * v1.m_floats[1];
@ -321,8 +301,7 @@ namespace etk {
* @param t The ration of this to v (t = 0 => return this, t=1 => return other) * @param t The ration of this to v (t = 0 => return this, t=1 => return other)
*/ */
/* /*
Vector3D<T> lerp(const Vector4D<T>& v, const btScalar& t) const Vector3D<T> lerp(const Vector4D<T>& v, const btScalar& t) const {
{
return Vector3D<T>(m_floats[0] + (v.m_floats[0] - m_floats[0]) * t, return Vector3D<T>(m_floats[0] + (v.m_floats[0] - m_floats[0]) * t,
m_floats[1] + (v.m_floats[1] - m_floats[1]) * t, m_floats[1] + (v.m_floats[1] - m_floats[1]) * t,
m_floats[2] + (v.m_floats[2] - m_floats[2]) * t, m_floats[2] + (v.m_floats[2] - m_floats[2]) * t,
@ -333,16 +312,14 @@ namespace etk {
* @brief Elementwise multiply this vector by the other * @brief Elementwise multiply this vector by the other
* @param v The other vector * @param v The other vector
*/ */
Vector4D<T>& operator*=(const Vector4D<T>& v) Vector4D<T>& operator*=(const Vector4D<T>& v) {
{
m_floats[0] *= v.m_floats[0]; m_floats[0] *= v.m_floats[0];
m_floats[1] *= v.m_floats[1]; m_floats[1] *= v.m_floats[1];
m_floats[2] *= v.m_floats[2]; m_floats[2] *= v.m_floats[2];
m_floats[3] *= v.m_floats[3]; m_floats[3] *= v.m_floats[3];
return *this; return *this;
} }
Vector4D<T> operator*(const Vector4D<T>& v) Vector4D<T> operator*(const Vector4D<T>& v) {
{
return Vector4D<T>(m_floats[0] * v.m_floats[0], return Vector4D<T>(m_floats[0] * v.m_floats[0],
m_floats[1] * v.m_floats[1], m_floats[1] * v.m_floats[1],
m_floats[2] * v.m_floats[2], m_floats[2] * v.m_floats[2],
@ -401,16 +378,14 @@ namespace etk {
operator T *() { return &m_floats[0]; } operator T *() { return &m_floats[0]; }
operator const T *() const { return &m_floats[0]; } operator const T *() const { return &m_floats[0]; }
bool operator==(const Vector4D<T>& other) const bool operator==(const Vector4D<T>& other) const {
{
return ( (m_floats[3]==other.m_floats[3]) return ( (m_floats[3]==other.m_floats[3])
&& (m_floats[2]==other.m_floats[2]) && (m_floats[2]==other.m_floats[2])
&& (m_floats[1]==other.m_floats[1]) && (m_floats[1]==other.m_floats[1])
&& (m_floats[0]==other.m_floats[0])); && (m_floats[0]==other.m_floats[0]));
} }
bool operator!=(const Vector4D<T>& other) const bool operator!=(const Vector4D<T>& other) const {
{
return ( (m_floats[3]!=other.m_floats[3]) return ( (m_floats[3]!=other.m_floats[3])
|| (m_floats[2]!=other.m_floats[2]) || (m_floats[2]!=other.m_floats[2])
|| (m_floats[1]!=other.m_floats[1]) || (m_floats[1]!=other.m_floats[1])
@ -421,8 +396,7 @@ namespace etk {
* @brief Set each element to the max of the current values and the values of another btVector3 * @brief Set each element to the max of the current values and the values of another btVector3
* @param other The other btVector3 to compare with * @param other The other btVector3 to compare with
*/ */
void setMax(const Vector4D<T>& other) void setMax(const Vector4D<T>& other) {
{
btSetMax(m_floats[0], other.m_floats[0]); btSetMax(m_floats[0], other.m_floats[0]);
btSetMax(m_floats[1], other.m_floats[1]); btSetMax(m_floats[1], other.m_floats[1]);
btSetMax(m_floats[2], other.m_floats[2]); btSetMax(m_floats[2], other.m_floats[2]);
@ -433,36 +407,31 @@ namespace etk {
* @brief Set each element to the min of the current values and the values of another btVector3 * @brief Set each element to the min of the current values and the values of another btVector3
* @param other The other btVector3 to compare with * @param other The other btVector3 to compare with
*/ */
void setMin(const Vector4D<T>& other) void setMin(const Vector4D<T>& other) {
{
btSetMin(m_floats[0], other.m_floats[0]); btSetMin(m_floats[0], other.m_floats[0]);
btSetMin(m_floats[1], other.m_floats[1]); btSetMin(m_floats[1], other.m_floats[1]);
btSetMin(m_floats[2], other.m_floats[2]); btSetMin(m_floats[2], other.m_floats[2]);
btSetMin(m_floats[3], other.m_floats[3]); btSetMin(m_floats[3], other.m_floats[3]);
} }
void setValue(const T& _x, const T& _y, const T& _z, const T& _w) void setValue(const T& _x, const T& _y, const T& _z, const T& _w) {
{
m_floats[0]=_x; m_floats[0]=_x;
m_floats[1]=_y; m_floats[1]=_y;
m_floats[2]=_z; m_floats[2]=_z;
m_floats[3]=_w; m_floats[3]=_w;
} }
/* /*
void getSkewSymmetricMatrix(Vector3D<T>* v0,Vector3D<T>* v1,Vector3D<T>* v2) const void getSkewSymmetricMatrix(Vector3D<T>* v0,Vector3D<T>* v1,Vector3D<T>* v2) const {
{
v0->setValue(0. ,-z() ,y()); v0->setValue(0. ,-z() ,y());
v1->setValue(z() ,0. ,-x()); v1->setValue(z() ,0. ,-x());
v2->setValue(-y() ,x() ,0.); v2->setValue(-y() ,x() ,0.);
} }
*/ */
void setZero() void setZero() {
{
setValue(0,0,0,0); setValue(0,0,0,0);
} }
bool isZero() const bool isZero() const {
{
return m_floats[0] == 0 && m_floats[1] == 0 && m_floats[2] == 0 && m_floats[3] == 0; return m_floats[0] == 0 && m_floats[1] == 0 && m_floats[2] == 0 && m_floats[3] == 0;
} }
}; };