mirror of https://github.com/zeldaret/botw.git
Havok: Add hkQuaternionf::setMulInverse/setInverseMul
This commit is contained in:
parent
2d352a8e0b
commit
a3bf47bd9d
|
@ -26,8 +26,14 @@ public:
|
||||||
HK_FORCE_INLINE hkFloat32 getAngle() const;
|
HK_FORCE_INLINE hkFloat32 getAngle() const;
|
||||||
hkSimdFloat32 getAngleSr() const;
|
hkSimdFloat32 getAngleSr() const;
|
||||||
|
|
||||||
|
/// self = self * q
|
||||||
HK_FORCE_INLINE void mul(hkQuaternionfParameter q);
|
HK_FORCE_INLINE void mul(hkQuaternionfParameter q);
|
||||||
HK_FORCE_INLINE void setMul(hkQuaternionfParameter q0, hkQuaternionfParameter q1);
|
/// self = r * q
|
||||||
|
HK_FORCE_INLINE void setMul(hkQuaternionfParameter r, hkQuaternionfParameter q);
|
||||||
|
/// self = r * q^-1
|
||||||
|
HK_FORCE_INLINE void setMulInverse(hkQuaternionfParameter r, hkQuaternionfParameter q);
|
||||||
|
/// self = r^-1 * q
|
||||||
|
HK_FORCE_INLINE void setInverseMul(hkQuaternionfParameter r, hkQuaternionfParameter q);
|
||||||
|
|
||||||
HK_FORCE_INLINE void setInverse(hkQuaternionfParameter q);
|
HK_FORCE_INLINE void setInverse(hkQuaternionfParameter q);
|
||||||
|
|
||||||
|
@ -103,6 +109,28 @@ inline void hkQuaternionf::setMul(hkQuaternionfParameter r, hkQuaternionfParamet
|
||||||
m_vec.setXYZ_W(vec, (rReal * qReal) - rImag.dot<3>(qImag));
|
m_vec.setXYZ_W(vec, (rReal * qReal) - rImag.dot<3>(qImag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void hkQuaternionf::setMulInverse(hkQuaternionfParameter r, hkQuaternionfParameter q) {
|
||||||
|
const auto rImag = r.getImag();
|
||||||
|
const auto qImag = q.getImag();
|
||||||
|
|
||||||
|
hkVector4f vec;
|
||||||
|
vec.setCross(qImag, rImag);
|
||||||
|
vec.subMul(r.getRealPart(), qImag);
|
||||||
|
vec.addMul(q.getRealPart(), rImag);
|
||||||
|
m_vec.setXYZ_W(vec, rImag.dot<4>(qImag));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void hkQuaternionf::setInverseMul(hkQuaternionfParameter r, hkQuaternionfParameter q) {
|
||||||
|
const auto rImag = r.getImag();
|
||||||
|
const auto qImag = q.getImag();
|
||||||
|
|
||||||
|
hkVector4f vec;
|
||||||
|
vec.setCross(qImag, rImag);
|
||||||
|
vec.addMul(r.getRealPart(), qImag);
|
||||||
|
vec.subMul(q.getRealPart(), rImag);
|
||||||
|
m_vec.setXYZ_W(vec, rImag.dot<4>(qImag));
|
||||||
|
}
|
||||||
|
|
||||||
inline void hkQuaternionf::setInverse(const hkQuaternionf& q) {
|
inline void hkQuaternionf::setInverse(const hkQuaternionf& q) {
|
||||||
m_vec.setNeg<3>(q.getImag());
|
m_vec.setNeg<3>(q.getImag());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue