summaryrefslogtreecommitdiffstats
path: root/src/math
diff options
context:
space:
mode:
authorNikolay Korolev <nickvnuk@gmail.com>2019-06-23 00:34:11 +0200
committerNikolay Korolev <nickvnuk@gmail.com>2019-06-23 00:34:11 +0200
commit98cc8a434c0a484d2d56e1cb34dc88d7d98a0853 (patch)
treef8ac26e96ee38e77d12ea86006150c909da88926 /src/math
parentFixed little bug in Radar.cpp. (diff)
downloadre3-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.h34
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