mirror of
https://github.com/AxioDL/zeus.git
synced 2025-07-15 09:36:10 +00:00
Add CTransform::quickInverse, toCStyleMatrix
This commit is contained in:
parent
3f0f1bf338
commit
655ca9e036
@ -14,8 +14,7 @@ class CTransform {
|
|||||||
public:
|
public:
|
||||||
constexpr CTransform() : basis(false) {}
|
constexpr CTransform() : basis(false) {}
|
||||||
|
|
||||||
constexpr CTransform(const CMatrix3f& basis, const CVector3f& offset = {})
|
constexpr CTransform(const CMatrix3f& basis, const CVector3f& offset = {}) : basis(basis), origin(offset) {}
|
||||||
: basis(basis), origin(offset) {}
|
|
||||||
|
|
||||||
/* Column constructor */
|
/* Column constructor */
|
||||||
constexpr CTransform(const CVector3f& c0, const CVector3f& c1, const CVector3f& c2, const CVector3f& c3)
|
constexpr CTransform(const CVector3f& c0, const CVector3f& c1, const CVector3f& c2, const CVector3f& c3)
|
||||||
@ -36,6 +35,15 @@ public:
|
|||||||
return CTransform(inv, inv * -origin);
|
return CTransform(inv, inv * -origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] CTransform quickInverse() const {
|
||||||
|
return CTransform{basis.transposed(),
|
||||||
|
CVector3f{
|
||||||
|
basis[0][0] * -origin.x() - basis[0][1] * origin.y() - basis[0][2] * origin.z(),
|
||||||
|
basis[1][0] * -origin.x() - basis[1][1] * origin.y() - basis[1][2] * origin.z(),
|
||||||
|
basis[2][0] * -origin.x() - basis[2][1] * origin.y() - basis[2][2] * origin.z(),
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]] static CTransform Translate(const CVector3f& position) { return {CMatrix3f(), position}; }
|
[[nodiscard]] static CTransform Translate(const CVector3f& position) { return {CMatrix3f(), position}; }
|
||||||
|
|
||||||
[[nodiscard]] static CTransform Translate(float x, float y, float z) { return Translate({x, y, z}); }
|
[[nodiscard]] static CTransform Translate(float x, float y, float z) { return Translate({x, y, z}); }
|
||||||
@ -178,6 +186,24 @@ public:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outputs the matrix to a C-style array (column-major, GX style)
|
||||||
|
*/
|
||||||
|
void toCStyleMatrix(float mtx[3][4]) const {
|
||||||
|
mtx[0][0] = basis[0][0];
|
||||||
|
mtx[0][1] = basis[1][0];
|
||||||
|
mtx[0][2] = basis[2][0];
|
||||||
|
mtx[0][3] = origin.x();
|
||||||
|
mtx[1][0] = basis[0][1];
|
||||||
|
mtx[1][1] = basis[1][1];
|
||||||
|
mtx[1][2] = basis[2][1];
|
||||||
|
mtx[1][3] = origin.y();
|
||||||
|
mtx[2][0] = basis[0][2];
|
||||||
|
mtx[2][1] = basis[1][2];
|
||||||
|
mtx[2][2] = basis[2][2];
|
||||||
|
mtx[2][3] = origin.z();
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]] CVector3f upVector() const { return basis.m[2]; }
|
[[nodiscard]] CVector3f upVector() const { return basis.m[2]; }
|
||||||
|
|
||||||
[[nodiscard]] CVector3f frontVector() const { return basis.m[1]; }
|
[[nodiscard]] CVector3f frontVector() const { return basis.m[1]; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user