diff options
author | Nikolay Korolev <nickvnuk@gmail.com> | 2019-06-23 00:34:11 +0200 |
---|---|---|
committer | Nikolay Korolev <nickvnuk@gmail.com> | 2019-06-23 00:34:11 +0200 |
commit | 98cc8a434c0a484d2d56e1cb34dc88d7d98a0853 (patch) | |
tree | f8ac26e96ee38e77d12ea86006150c909da88926 /src/math | |
parent | Fixed little bug in Radar.cpp. (diff) | |
download | re3-98cc8a434c0a484d2d56e1cb34dc88d7d98a0853.tar re3-98cc8a434c0a484d2d56e1cb34dc88d7d98a0853.tar.gz re3-98cc8a434c0a484d2d56e1cb34dc88d7d98a0853.tar.bz2 re3-98cc8a434c0a484d2d56e1cb34dc88d7d98a0853.tar.lz re3-98cc8a434c0a484d2d56e1cb34dc88d7d98a0853.tar.xz re3-98cc8a434c0a484d2d56e1cb34dc88d7d98a0853.tar.zst re3-98cc8a434c0a484d2d56e1cb34dc88d7d98a0853.zip |
Diffstat (limited to 'src/math')
-rw-r--r-- | src/math/Matrix.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/math/Matrix.h b/src/math/Matrix.h index a93de636..2ee3863f 100644 --- a/src/math/Matrix.h +++ b/src/math/Matrix.h @@ -246,3 +246,37 @@ Multiply3x3(const CMatrix &mat, const CVector &vec) mat.m_matrix.right.y * vec.x + mat.m_matrix.up.y * vec.y + mat.m_matrix.at.y * vec.z, mat.m_matrix.right.z * vec.x + mat.m_matrix.up.z * vec.y + mat.m_matrix.at.z * vec.z); } + +class CCompressedMatrixNotAligned +{ + CVector m_vecPos; + int8 m_rightX; + int8 m_rightY; + int8 m_rightZ; + int8 m_upX; + int8 m_upY; + int8 m_upZ; +public: + void CompressFromFullMatrix(CMatrix &other) + { + m_rightX = 127.0f * other.GetRight()->x; + m_rightY = 127.0f * other.GetRight()->y; + m_rightZ = 127.0f * other.GetRight()->z; + m_upX = 127.0f * other.GetForward()->x; + m_upY = 127.0f * other.GetForward()->y; + m_upZ = 127.0f * other.GetForward()->z; + m_vecPos = *other.GetPosition(); + } + void DecompressIntoFullMatrix(CMatrix &other) + { + other.GetRight()->x = m_rightX / 127.0f; + other.GetRight()->y = m_rightY / 127.0f; + other.GetRight()->z = m_rightZ / 127.0f; + other.GetForward()->x = m_upX / 127.0f; + other.GetForward()->y = m_upY / 127.0f; + other.GetForward()->z = m_upZ / 127.0f; + *other.GetUp() = CrossProduct(*other.GetRight(), *other.GetForward()); + *other.GetPosition() = m_vecPos; + other.Reorthogonalise(); + } +};
\ No newline at end of file |