17 template<> Quat_<Float> Quat_<Float>::slerp_fast(
Real t,
const Quat_& q0,
const Quat_& q1,
Real cosAlpha);
20 Quat_& a, Quat_& b, Quat_& c);
22 template<> Quat_<Float>
Quat_<Float>::squad(
Real t,
const Quat_& q1,
const Quat_& a,
const Quat_& b,
const Quat_& c);
36 static FLOAT* DX(
Float& f) {
return reinterpret_cast<FLOAT*
>(&f); }
37 static D3DXVECTOR3* DX(
Vec3_f& v) {
return reinterpret_cast<D3DXVECTOR3*
>(&v); }
38 static const D3DXVECTOR3* DX(
const Vec3_f& v) {
return reinterpret_cast<const D3DXVECTOR3*
>(&v); }
39 static D3DXQUATERNION* DX(
Quat_f& q) {
return reinterpret_cast<D3DXQUATERNION*
>(&q); }
40 static const D3DXQUATERNION* DX(
const Quat_f& q) {
return reinterpret_cast<const D3DXQUATERNION*
>(&q); }
41 static D3DXMATRIX* DX(
Matrix4_f& m) {
return reinterpret_cast<D3DXMATRIX*
>(&m); }
42 static const D3DXMATRIX* DX(
const Matrix4_f& m) {
return reinterpret_cast<const D3DXMATRIX*
>(&m); }
47 D3DXQuaternionRotationAxis(DX(*
this), DX(axis), angle);
53 D3DXQuaternionRotationMatrix(DX(*
this), DX(rot));
54 x = -x; y = -y; z = -z;
61 D3DXQuaternionMultiply(DX(ret), DX(rhs), DX(*
this));
68 D3DXQuaternionExp(DX(ret), DX(*
this));
75 D3DXQuaternionLn(DX(ret), DX(*
this));
84 if (l > RealT::zeroTol)
94 D3DXQuaternionNormalize(DX(ret), DX(*
this));
100 D3DXQuaternionToAxisAngle(DX(*
this), DX(axis), DX(angle));
101 axis = axis.normalize();
104 template<> Quat_<Float> Quat_<Float>::slerp_fast(
Real t,
const Quat_& q0,
const Quat_& q1,
Real )
107 D3DXQuaternionSlerp(DX(ret), DX(q0), DX(q1), t);
113 Quat_ inv = inverse();
117 D3DXMatrixRotationQuaternion(DX(rot), DX(inv));
122 const Real save[] = { rot( 3), rot( 7), rot(11),
123 rot(12), rot(13), rot(14), rot(15)};
125 D3DXMatrixRotationQuaternion(DX(rot), DX(inv));
128 rot( 3) = save[0]; rot( 7) = save[1]; rot(11) = save[2];
129 rot(12) = save[3]; rot(13) = save[4]; rot(14) = save[5]; rot(15) = save[6];
135 Quat_& a, Quat_& b, Quat_& c)
137 D3DXQuaternionSquadSetup(DX(a), DX(b), DX(c), DX(q0), DX(q1), DX(q2), DX(q3));
140 template<> Quat_<Float>
Quat_<Float>::squad(
Float t,
const Quat_& q1,
const Quat_& a,
const Quat_& b,
const Quat_& c)
144 D3DXQuaternionSquad(DX(ret), DX(q1), DX(a), DX(b), DX(c), t);
153 D3DXQuaternionBaryCentric(DX(ret), DX(q0), DX(q1), DX(q2), f, g);
Quat_ normalize_fast() const
Fast normalization, only accurate when quaternion is close to unit length.
Definition: Quat.h:226
Float_::Real Float
float type
Definition: Float.h:61
Vec< 3, Float > Vec3_f
Definition: Vec3.h:357
Quat_ operator*(const Quat_ &rhs) const
Definition: Quat.h:151
Matrix4 & toMatrix(Matrix4 &rot, bool b3x3=false) const
Convert quaternion to 4x4 homogeneous rotation matrix. Set b3x3 to true to store the result only in t...
Definition: Quat.cpp:422
Quat_ ln() const
Definition: Quat.cpp:237
Quat_ normalize(optional< Real & > len=optnull) const
Get unit quaternion. The pre-normalized length will be returned in len if specified.
Definition: Quat.h:213
Quat_ & fromMatrix(const Matrix4 &rot)
Construct from 4x4 homogeneous matrix. Rotation is extracted from upper-left 3x3 submatrix.
Definition: Quat.cpp:91
static Quat_ squad(Real t, const Quat_ &q1, const Quat_ &a, const Quat_ &b, const Quat_ &c)
Spherical quadratic interpolation between q1 and c. t ranges from [0,1].
Definition: Quat.cpp:487
static std::common_type< Num, Num2, Num3 >::type clamp(Num val, Num2 min, Num3 max)
Ensure that a number is within a range.
Definition: Alge.h:99
float Real
Real number type. See Real_ for real number operations and constants.
Definition: Real.h:21
Quat_ & fromAxisAngle(const Vec3 &axis, Real angle)
Construct from axis and angle in radians.
Definition: Quat.cpp:14
Vec< 3 > Vec3
3D column vector types
Definition: Vec3.h:356
Matrix< 4, 4, Real > Matrix4
Definition: Matrix4.h:513
Quat_< Float > Quat_f
Definition: Quat.h:354
void axisAngle(Vec3 &axis, Real &angle) const
Get quaternion axis and angle in radians.
Definition: Quat.cpp:326
Matrix< 4, 4, Float > Matrix4_f
Definition: Matrix4.h:514
static void squadSetup(const Quat_ &q0, const Quat_ &q1, const Quat_ &q2, const Quat_ &q3, Quat_ &a, Quat_ &b, Quat_ &c)
Calc intermediate quats required for Squad. Ex. To interpolate between q1 and q2: setup(q0...
Definition: Quat.cpp:472
Global Honeycomb namespace.
Quat_ exp() const
Definition: Quat.cpp:205
static Quat_ baryCentric(Real f, Real g, const Quat_ &q0, const Quat_ &q1, const Quat_ &q2)
Triangular bary-centric interpolation.
Definition: Quat.cpp:496