4 #include "blub/core/globals.hpp"
5 #include "blub/math/predecl.hpp"
6 #include "blub/serialization/access.hpp"
7 #include "blub/serialization/nameValuePair.hpp"
10 # include <foundation/PxQuat.h>
29 : w(1), x(0), y(0), z(0)
34 real fX, real fY, real fZ, real fW)
35 : w(fW), x(fX), y(fY), z(fZ)
40 this->FromAngleAxis(rfAngle, rkAxis);
43 #ifndef BLUB_NO_OGRE3D
44 quaternion(
const Ogre::Quaternion &quat);
45 operator Ogre::Quaternion()
const;
47 #ifndef BLUB_NO_BULLET
48 quaternion(
const btQuaternion &quat);
49 operator btQuaternion()
const;
52 quaternion(
const physx::PxQuat& other)
53 : w(other.w), x(other.x), y(other.y), z(other.z)
55 operator physx::PxQuat()
const
56 {
return physx::PxQuat(x,y,z,w);}
61 inline void swap(quaternion& other);
86 inline const real*
ptr()
const
105 return quaternion(fScalar*rkQ.x, fScalar*rkQ.y, fScalar*rkQ.z, fScalar*rkQ.w);
107 vector3 operator* (
const vector3& rkVector)
const;
108 quaternion operator- ()
const;
111 inline bool operator== (
const quaternion& rhs)
const
113 return (rhs.x == x) && (rhs.y == y) &&
114 (rhs.z == z) && (rhs.w == w);
116 inline bool operator!= (
const quaternion& rhs)
const
118 return !operator==(rhs);
121 real Dot (
const quaternion& rkQ)
const;
124 quaternion getNormalised()
const;
125 quaternion Inverse ()
const;
126 quaternion UnitInverse ()
const;
127 quaternion Exp ()
const;
128 quaternion Log ()
const;
129 void FromAngleAxis (
const real& rfAngle,
const vector3& rkAxis);
131 static quaternion Slerp (real fT,
const quaternion& rkP,
132 const quaternion& rkQ,
bool shortestPath =
false);
139 const quaternion& rkP,
const quaternion& rkQ,
143 static void Intermediate (
const quaternion& rkQ0,
144 const quaternion& rkQ1,
const quaternion& rkQ2,
145 quaternion& rkA, quaternion& rkB);
148 static quaternion Squad (real fT,
const quaternion& rkP,
149 const quaternion& rkA,
const quaternion& rkB,
150 const quaternion& rkQ,
bool shortestPath =
false);
166 static quaternion
nlerp(real fT,
const quaternion& rkP,
167 const quaternion& rkQ,
bool shortestPath =
false);
170 static const quaternion ZERO;
171 static const quaternion IDENTITY;
177 BLUB_SERIALIZATION_ACCESS
178 template<
typename Archive>
179 void serialize(Archive & readWrite,
const unsigned int version)
183 readWrite & BLUB_SERIALIZATION_NAMEVALUEPAIR(x);
184 readWrite & BLUB_SERIALIZATION_NAMEVALUEPAIR(y);
185 readWrite & BLUB_SERIALIZATION_NAMEVALUEPAIR(z);
186 readWrite & BLUB_SERIALIZATION_NAMEVALUEPAIR(w);
192 std::ostream& operator << (std::ostream& ostr,
const quaternion& toCast);
197 #endif // QUATERNION_HPP
Definition: quaternion.hpp:25
void swap(quaternion &other)
Definition: quaternion.cpp:49
quaternion(real fX, real fY, real fZ, real fW)
Construct from an explicit list of values.
Definition: quaternion.hpp:33
real * ptr()
Pointer accessor for direct copying.
Definition: quaternion.hpp:80
Definition: vector3.hpp:26
real operator[](const size_t i) const
Array accessor operator.
Definition: quaternion.hpp:64
static quaternion SlerpExtraSpins(real fT, const quaternion &rkP, const quaternion &rkQ, int iExtraSpins)
Definition: quaternion.cpp:262
const real * ptr() const
Pointer accessor for direct copying.
Definition: quaternion.hpp:86
Definition: deadlineTimer.hpp:10
Definition: axisAlignedBox.hpp:10
static quaternion nlerp(real fT, const quaternion &rkP, const quaternion &rkQ, bool shortestPath=false)
Definition: quaternion.cpp:301