NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
m_mtx.hpp
1#pragma once
2#include <types.h>
3#include <game/mLib/m_angle.hpp>
4#include <game/mLib/m_vec.hpp>
5#include <nw4r/math.h>
6
7/// @brief A 3x4 matrix.
8/// @ingroup mlib
9class mMtx_c : public nw4r::math::MTX34 {
10public:
11 /// @brief Constructs an empty matrix.
12 mMtx_c() {}
13
14 /// @brief Constructs a matrix from an MTX34.
15 mMtx_c(const nw4r::math::MTX34 &mtx) : MTX34(mtx) {}
16
17 /// @brief Constructs a matrix with the given components.
18 mMtx_c(float _00, float _01, float _02, float _03, float _10, float _11, float _12, float _13, float _20, float _21, float _22, float _23);
19
20 /// @brief Mtx cast operator.
21 operator Mtx*() { return &mtx; }
22
23 /// @brief Const Mtx cast operator.
24 operator const Mtx*() const { return &mtx; }
25
26 mMtx_c &operator=(const mMtx_c &other) {
27 for (int i = 0; i < 3; i++) {
28 for (int j = 0; j < 4; j++) {
29 m[i][j] = other.m[i][j];
30 }
31 }
32 return *this;
33 }
34
35 void XrotS(mAng angle); ///< Generates a rotation matrix for the X axis with the given angle.
36 void XrotM(mAng angle); ///< Rotates the matrix on the X axis by the given angle.
37 void YrotS(mAng angle); ///< Generates a rotation matrix for the Y axis with the given angle.
38 void YrotM(mAng angle); ///< Rotates the matrix on the Y axis by the given angle.
39 void ZrotS(mAng angle); ///< Generates a rotation matrix for the Z axis with the given angle.
40 void ZrotM(mAng angle); ///< Rotates the matrix on the Z axis by the given angle.
41
42 void ZXYrotM(mAng xRot, mAng yRot, mAng zRot); ///< Rotates the matrix on the Y, X and Z axes by the given angles.
43 void XYZrotM(mAng xRot, mAng yRot, mAng zRot); ///< Rotates the matrix on the Z, Y and X axes by the given angles.
44
45 void toRot(mAng3_c &out) const; ///< Extracts the rotation vector from the matrix.
46 void multVecZero(nw4r::math::VEC3 &out) const; ///< Extracts the translation vector from the matrix.
47 void zero(); ///< Zeroes out the matrix.
48
49 mVec3_c getTranslation() const {
50 float x = m[0][3];
51 float y = m[1][3];
52 float z = m[2][3];
53 return mVec3_c(x, y, z);
54 }
55
56 static mMtx_c createTrans(const mVec3_c &v) { return createTrans(v.x, v.y, v.z); }
57 static mMtx_c createTrans(float x, float y, float z) { mMtx_c mtx; PSMTXTrans(mtx, x, y, z); return mtx; }
58 static mMtx_c createScale(const mVec3_c &v) { mMtx_c mtx; PSMTXScale(mtx, v.x, v.y, v.z); return mtx; }
59 static mMtx_c createScale(float x, float y, float z) { mMtx_c mtx; PSMTXScale(mtx, x, y, z); return mtx; }
60
61 mMtx_c &concat(const mMtx_c &other) { PSMTXConcat(*this, other, *this); return *this; }
62 mMtx_c &trans(const mVec3_c &v) { PSMTXTrans(*this, v.x, v.y, v.z); return *this; }
63 mMtx_c &trans(float x, float y, float z) { PSMTXTrans(*this, x, y, z); return *this; }
64 mMtx_c &ZXYrotM(const mAng3_c &ang) { ZXYrotM(ang.x, ang.y, ang.z); return *this; }
65
66 float transX() const { return getTranslation().x; }
67 float transY() const { return getTranslation().y; }
68 float transZ() const { return getTranslation().z; }
69
70 static mMtx_c Identity; ///< The identity matrix.
71};
mAng y
The rotation on the Y axis.
Definition m_angle.hpp:126
mAng z
The rotation on the Z axis.
Definition m_angle.hpp:127
mAng x
The rotation on the X axis.
Definition m_angle.hpp:125
A 3x4 matrix.
Definition m_mtx.hpp:9
mMtx_c()
Constructs an empty matrix.
Definition m_mtx.hpp:12
void ZrotS(mAng angle)
Generates a rotation matrix for the Z axis with the given angle.
Definition m_mtx.cpp:75
void XYZrotM(mAng xRot, mAng yRot, mAng zRot)
Rotates the matrix on the Z, Y and X axes by the given angles.
Definition m_mtx.cpp:107
void toRot(mAng3_c &out) const
Extracts the rotation vector from the matrix.
Definition m_mtx.cpp:121
void multVecZero(nw4r::math::VEC3 &out) const
Extracts the translation vector from the matrix.
Definition m_mtx.cpp:135
mMtx_c(const nw4r::math::MTX34 &mtx)
Constructs a matrix from an MTX34.
Definition m_mtx.hpp:15
void ZrotM(mAng angle)
Rotates the matrix on the Z axis by the given angle.
Definition m_mtx.cpp:93
void XrotS(mAng angle)
Generates a rotation matrix for the X axis with the given angle.
Definition m_mtx.cpp:23
void YrotS(mAng angle)
Generates a rotation matrix for the Y axis with the given angle.
Definition m_mtx.cpp:49
void ZXYrotM(mAng xRot, mAng yRot, mAng zRot)
Rotates the matrix on the Y, X and Z axes by the given angles.
Definition m_mtx.cpp:101
static mMtx_c Identity
The identity matrix.
Definition m_mtx.hpp:70
void XrotM(mAng angle)
Rotates the matrix on the X axis by the given angle.
Definition m_mtx.cpp:41
void zero()
Zeroes out the matrix.
Definition m_mtx.cpp:141
void YrotM(mAng angle)
Rotates the matrix on the Y axis by the given angle.
Definition m_mtx.cpp:67