OpenBarnyard
 
Loading...
Searching...
No Matches
TMatrix44 Class Reference

#include <TMatrix44.h>

Public Member Functions

constexpr TMatrix44 ()=default
 
constexpr TMatrix44 (const TMatrix44 &a_rMatrix)
 
constexpr TMatrix44 (TFLOAT a_f11, TFLOAT a_f12, TFLOAT a_f13, TFLOAT a_f14, TFLOAT a_f21, TFLOAT a_f22, TFLOAT a_f23, TFLOAT a_f24, TFLOAT a_f31, TFLOAT a_f32, TFLOAT a_f33, TFLOAT a_f34, TFLOAT a_f41, TFLOAT a_f42, TFLOAT a_f43, TFLOAT a_f44)
 
constexpr void Set (TFLOAT a_f11, TFLOAT a_f12, TFLOAT a_f13, TFLOAT a_f14, TFLOAT a_f21, TFLOAT a_f22, TFLOAT a_f23, TFLOAT a_f24, TFLOAT a_f31, TFLOAT a_f32, TFLOAT a_f33, TFLOAT a_f34, TFLOAT a_f41, TFLOAT a_f42, TFLOAT a_f43, TFLOAT a_f44)
 
constexpr void Set (const TMatrix44 &a_rcMatrix)
 
constexpr void Identity ()
 
const TVector3AsBasisVector3 (BASISVECTOR a_iIndex) const
 
TVector3AsBasisVector3 (BASISVECTOR a_iIndex)
 
const TVector4AsBasisVector4 (BASISVECTOR a_iIndex) const
 
TVector4AsBasisVector4 (BASISVECTOR a_iIndex)
 
TVector3GetTranslation3 ()
 
const TVector3GetTranslation3 () const
 
TVector4GetTranslation ()
 
const TVector4GetTranslation () const
 
void SetTranslation (const TVector4 &a_rTranslation)
 
void LookAtTarget (const TVector4 &a_rTarget, const TVector4 &a_rUp)
 
void LookAtDirection (const TVector4 &a_rVec, const TVector4 &a_rVec2)
 
constexpr void Scale (TFLOAT a_fScalar1, TFLOAT a_fScalar2, TFLOAT a_fScalar3)
 
constexpr void Scale (const TVector4 &a_rScalars)
 
constexpr void Scale (TFLOAT a_fScale)
 
constexpr TBOOL IsOrthonormal () const
 
void Multiply (const TMatrix44 &a_rLeft, const TMatrix44 &a_rRight)
 
void Multiply (const TMatrix44 &a_rRight)
 
TBOOL Invert (const TMatrix44 &a_rRight)
 
void InvertOrthogonal ()
 
void InvertOrthogonal (const TMatrix44 &a_rRight)
 
void InvertOrthonormal ()
 
TMatrix44SetFromQuaternion (const TQuaternion &a_rQuaternion)
 
TMatrix44PushQuaternion (const TQuaternion &a_rQuaternion, const TMatrix44 &a_rMatrix, const TVector3 &a_rOrigin)
 
void RotateX (TFLOAT a_fAngle)
 
void RotateY (TFLOAT a_fAngle)
 
void RotateZ (TFLOAT a_fAngle)
 
void GetEulerXYZ (TVector3 &a_rOutVec) const
 
constexpr void operator= (const TMatrix44 &a_rcMatrix)
 

Static Public Member Functions

static void TransformPlaneOrthogonal (TPlane &a_rOutPlane, const TMatrix44 &a_rMatrix, const TPlane &a_rcSourcePlane)
 
static constexpr void RotateVector (TVector4 &a_rOutVector, const TMatrix44 &a_rMatrix, const TVector4 &a_rVector)
 
static constexpr void TransformVector (TVector3 &a_rOutVector, const TMatrix44 &a_rMatrix, const TVector3 &a_rVector)
 
static constexpr void TransformVector (TVector4 &a_rOutVector, const TMatrix44 &a_rMatrix, const TVector4 &a_rVector)
 

Public Attributes

TFLOAT m_f11
 
TFLOAT m_f12
 
TFLOAT m_f13
 
TFLOAT m_f14
 
TFLOAT m_f21
 
TFLOAT m_f22
 
TFLOAT m_f23
 
TFLOAT m_f24
 
TFLOAT m_f31
 
TFLOAT m_f32
 
TFLOAT m_f33
 
TFLOAT m_f34
 
TFLOAT m_f41
 
TFLOAT m_f42
 
TFLOAT m_f43
 
TFLOAT m_f44
 

Static Public Attributes

static constinit TMatrix44 IDENTITY
 

Detailed Description

Definition at line 31 of file TMatrix44.h.

Constructor & Destructor Documentation

◆ TMatrix44() [1/3]

TMatrix44::TMatrix44 ( )
constexprdefault

◆ TMatrix44() [2/3]

TMatrix44::TMatrix44 ( const TMatrix44 & a_rMatrix)
inlineconstexpr

Definition at line 36 of file TMatrix44.h.

37 : m_f11( a_rMatrix.m_f11 ), m_f12( a_rMatrix.m_f12 ), m_f13( a_rMatrix.m_f13 ), m_f14( a_rMatrix.m_f14 ), m_f21( a_rMatrix.m_f21 ), m_f22( a_rMatrix.m_f22 ), m_f23( a_rMatrix.m_f23 ), m_f24( a_rMatrix.m_f24 ), m_f31( a_rMatrix.m_f31 ), m_f32( a_rMatrix.m_f32 ), m_f33( a_rMatrix.m_f33 ), m_f34( a_rMatrix.m_f34 ), m_f41( a_rMatrix.m_f41 ), m_f42( a_rMatrix.m_f42 ), m_f43( a_rMatrix.m_f43 ), m_f44( a_rMatrix.m_f44 )
38 {}
TFLOAT m_f21
Definition TMatrix44.h:361
TFLOAT m_f12
Definition TMatrix44.h:360
TFLOAT m_f44
Definition TMatrix44.h:363
TFLOAT m_f43
Definition TMatrix44.h:363
TFLOAT m_f32
Definition TMatrix44.h:362
TFLOAT m_f13
Definition TMatrix44.h:360
TFLOAT m_f14
Definition TMatrix44.h:360
TFLOAT m_f11
Definition TMatrix44.h:360
TFLOAT m_f23
Definition TMatrix44.h:361
TFLOAT m_f22
Definition TMatrix44.h:361
TFLOAT m_f41
Definition TMatrix44.h:363
TFLOAT m_f31
Definition TMatrix44.h:362
TFLOAT m_f24
Definition TMatrix44.h:361
TFLOAT m_f34
Definition TMatrix44.h:362
TFLOAT m_f42
Definition TMatrix44.h:363
TFLOAT m_f33
Definition TMatrix44.h:362

◆ TMatrix44() [3/3]

TMatrix44::TMatrix44 ( TFLOAT a_f11,
TFLOAT a_f12,
TFLOAT a_f13,
TFLOAT a_f14,
TFLOAT a_f21,
TFLOAT a_f22,
TFLOAT a_f23,
TFLOAT a_f24,
TFLOAT a_f31,
TFLOAT a_f32,
TFLOAT a_f33,
TFLOAT a_f34,
TFLOAT a_f41,
TFLOAT a_f42,
TFLOAT a_f43,
TFLOAT a_f44 )
inlineconstexpr

Definition at line 40 of file TMatrix44.h.

58 : m_f11( a_f11 ), m_f12( a_f12 ), m_f13( a_f13 ), m_f14( a_f14 ), m_f21( a_f21 ), m_f22( a_f22 ), m_f23( a_f23 ), m_f24( a_f24 ), m_f31( a_f31 ), m_f32( a_f32 ), m_f33( a_f33 ), m_f34( a_f34 ), m_f41( a_f41 ), m_f42( a_f42 ), m_f43( a_f43 ), m_f44( a_f44 )
59 {}

Member Function Documentation

◆ AsBasisVector3() [1/2]

TVector3 & TMatrix44::AsBasisVector3 ( BASISVECTOR a_iIndex)
inline

Definition at line 123 of file TMatrix44.h.

124 {
125 return *TREINTERPRETCAST(
126 TVector3*,
127 TREINTERPRETCAST( TUINTPTR, this ) + a_iIndex * sizeof( TVector4 )
128 );
129 }
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
uintptr_t TUINTPTR
Definition Typedefs.h:18

◆ AsBasisVector3() [2/2]

const TVector3 & TMatrix44::AsBasisVector3 ( BASISVECTOR a_iIndex) const
inline

Definition at line 115 of file TMatrix44.h.

116 {
117 return *TREINTERPRETCAST(
118 TVector3*,
119 TREINTERPRETCAST( TUINTPTR, this ) + a_iIndex * sizeof( TVector4 )
120 );
121 }

◆ AsBasisVector4() [1/2]

TVector4 & TMatrix44::AsBasisVector4 ( BASISVECTOR a_iIndex)
inline

Definition at line 139 of file TMatrix44.h.

140 {
141 return *TREINTERPRETCAST(
142 TVector4*,
143 TREINTERPRETCAST( TUINTPTR, this ) + a_iIndex * sizeof( TVector4 )
144 );
145 }

◆ AsBasisVector4() [2/2]

const TVector4 & TMatrix44::AsBasisVector4 ( BASISVECTOR a_iIndex) const
inline

Definition at line 131 of file TMatrix44.h.

132 {
133 return *TREINTERPRETCAST(
134 TVector4*,
135 TREINTERPRETCAST( TUINTPTR, this ) + a_iIndex * sizeof( TVector4 )
136 );
137 }

◆ GetEulerXYZ()

void TMatrix44::GetEulerXYZ ( TVector3 & a_rOutVec) const

Definition at line 282 of file TMatrix44.cpp.

283{
284 TFLOAT fVal1 = m_f31;
285 TMath::Clip( fVal1, -1.0f, 1.0f );
286
287 TFLOAT fVal2 = TMath::Sqrt( 1.0f - fVal1 * fVal1 );
288
289 if ( m_f11 < 0 && m_f33 < 0 )
290 fVal2 *= -1;
291
292 if ( 0.001f < fVal2 || fVal2 < -0.001 )
293 {
294 TFLOAT fVal3 = 1.0f / fVal2;
295
296 a_rOutVec.x = TMath::ATan2( m_f32 * fVal3, m_f33 * fVal3 );
297 a_rOutVec.y = TMath::ATan2( fVal1, fVal2 );
298 a_rOutVec.z = TMath::ATan2( m_f21 * fVal3, m_f11 * fVal3 );
299 }
300 else
301 {
302 a_rOutVec.x = TMath::ATan2( -m_f32, m_f22 );
303 a_rOutVec.y = -TMath::ASin( fVal1 );
304 a_rOutVec.z = 0.0f;
305 }
306}
float TFLOAT
Definition Typedefs.h:4
TFORCEINLINE TFLOAT ATan2(TFLOAT fVal1, TFLOAT fVal2)
Definition TMathInline.h:57
TFORCEINLINE void Clip(T &rVal, const T &Min, const T &Max)
TFORCEINLINE TFLOAT Sqrt(TFLOAT a_fX)
Definition TMathInline.h:84
TFORCEINLINE TFLOAT ASin(TFLOAT fVal)
Definition TMathInline.h:47
TFLOAT y
Definition TVector3.h:163
TFLOAT z
Definition TVector3.h:163
TFLOAT x
Definition TVector3.h:163

◆ GetTranslation() [1/2]

TVector4 & TMatrix44::GetTranslation ( )
inline

Definition at line 157 of file TMatrix44.h.

158 {
160 }
@ BASISVECTOR_TRANSLATION
Definition TMatrix44.h:28
const TVector4 & AsBasisVector4(BASISVECTOR a_iIndex) const
Definition TMatrix44.h:131

◆ GetTranslation() [2/2]

const TVector4 & TMatrix44::GetTranslation ( ) const
inline

Definition at line 162 of file TMatrix44.h.

163 {
165 }

◆ GetTranslation3() [1/2]

TVector3 & TMatrix44::GetTranslation3 ( )
inline

Definition at line 147 of file TMatrix44.h.

148 {
150 }
const TVector3 & AsBasisVector3(BASISVECTOR a_iIndex) const
Definition TMatrix44.h:115

◆ GetTranslation3() [2/2]

const TVector3 & TMatrix44::GetTranslation3 ( ) const
inline

Definition at line 152 of file TMatrix44.h.

153 {
155 }

◆ Identity()

void TMatrix44::Identity ( )
inlineconstexpr

Definition at line 110 of file TMatrix44.h.

111 {
112 Set( IDENTITY );
113 }
static constinit TMatrix44 IDENTITY
Definition TMatrix44.h:357
constexpr void Set(TFLOAT a_f11, TFLOAT a_f12, TFLOAT a_f13, TFLOAT a_f14, TFLOAT a_f21, TFLOAT a_f22, TFLOAT a_f23, TFLOAT a_f24, TFLOAT a_f31, TFLOAT a_f32, TFLOAT a_f33, TFLOAT a_f34, TFLOAT a_f41, TFLOAT a_f42, TFLOAT a_f43, TFLOAT a_f44)
Definition TMatrix44.h:62

◆ Invert()

TBOOL TMatrix44::Invert ( const TMatrix44 & a_rRight)

Definition at line 88 of file TMatrix44.cpp.

89{
90 TASSERT( a_rRight.m_f14 == 0.0f );
91 TASSERT( a_rRight.m_f24 == 0.0f );
92 TASSERT( a_rRight.m_f34 == 0.0f );
93 TASSERT( a_rRight.m_f44 == 1.0f );
94
95 TFLOAT fVar1;
96 TFLOAT fVar2;
97 TFLOAT fVar3;
98 TFLOAT fVar4;
99
100 fVar1 = a_rRight.m_f22 * a_rRight.m_f33 - a_rRight.m_f32 * a_rRight.m_f23;
101 fVar4 = -( a_rRight.m_f33 * a_rRight.m_f12 - a_rRight.m_f32 * a_rRight.m_f13 );
102 fVar3 = a_rRight.m_f23 * a_rRight.m_f12 - a_rRight.m_f22 * a_rRight.m_f13;
103 fVar2 = fVar4 * a_rRight.m_f21 + fVar1 * a_rRight.m_f11 + fVar3 * a_rRight.m_f31;
104
105 if ( fVar2 == 0.0 )
106 return TFALSE;
107
108 fVar2 = 1.0f / fVar2;
109 Set( fVar2 * fVar1, fVar4 * fVar2, fVar3 * fVar2, a_rRight.m_f14, -( ( a_rRight.m_f33 * a_rRight.m_f21 - a_rRight.m_f31 * a_rRight.m_f23 ) * fVar2 ), ( a_rRight.m_f11 * a_rRight.m_f33 - a_rRight.m_f31 * a_rRight.m_f13 ) * fVar2, -( ( a_rRight.m_f11 * a_rRight.m_f23 - a_rRight.m_f21 * a_rRight.m_f13 ) * fVar2 ), a_rRight.m_f24, ( a_rRight.m_f32 * a_rRight.m_f21 - a_rRight.m_f31 * a_rRight.m_f22 ) * fVar2, -( ( a_rRight.m_f32 * a_rRight.m_f11 - a_rRight.m_f31 * a_rRight.m_f12 ) * fVar2 ), ( a_rRight.m_f22 * a_rRight.m_f11 - a_rRight.m_f21 * a_rRight.m_f12 ) * fVar2, a_rRight.m_f34, -a_rRight.m_f41, -a_rRight.m_f42, -a_rRight.m_f43, a_rRight.m_f44 );
110 RotateVector( AsBasisVector4( 3 ), *this, AsBasisVector4( 3 ) );
111
112 return TTRUE;
113}
#define TASSERT(X,...)
Definition Defines.h:138
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
static constexpr void RotateVector(TVector4 &a_rOutVector, const TMatrix44 &a_rMatrix, const TVector4 &a_rVector)
Definition TMatrix44.h:252

◆ InvertOrthogonal() [1/2]

void TMatrix44::InvertOrthogonal ( )

Definition at line 159 of file TMatrix44.cpp.

160{
161 InvertOrthogonal( *this );
162}
void InvertOrthogonal()

◆ InvertOrthogonal() [2/2]

void TMatrix44::InvertOrthogonal ( const TMatrix44 & a_rRight)

Definition at line 116 of file TMatrix44.cpp.

117{
118 TASSERT( a_rRight.m_f14 == 0.0f );
119 TASSERT( a_rRight.m_f24 == 0.0f );
120 TASSERT( a_rRight.m_f34 == 0.0f );
121 TASSERT( a_rRight.m_f44 == 1.0f );
122
123 TFLOAT fVar7 = a_rRight.m_f13;
124 TFLOAT fVar1 = a_rRight.m_f44;
125 TFLOAT fVar2 = a_rRight.m_f43;
126 TFLOAT fVar8 = a_rRight.m_f24;
127 TFLOAT fVar3 = a_rRight.m_f42;
128 TFLOAT fVar9 = a_rRight.m_f32;
129 TFLOAT fVar4 = a_rRight.m_f41;
130 TFLOAT fVar10 = a_rRight.m_f22;
131 TFLOAT fVar5 = a_rRight.m_f34;
132 TFLOAT fVar11 = a_rRight.m_f12;
133 TFLOAT fVar6 = a_rRight.m_f33;
134 TFLOAT fVar12 = a_rRight.m_f14;
135 TFLOAT fVar13 = a_rRight.m_f31;
136 TFLOAT fVar14 = a_rRight.m_f21;
137 TFLOAT fVar15 = a_rRight.m_f11;
138
139 m_f32 = a_rRight.m_f23;
140 m_f11 = fVar15;
141 m_f33 = fVar6;
142 m_f13 = fVar13;
143 m_f34 = fVar5;
144 m_f21 = fVar11;
145 m_f41 = -fVar4;
146 m_f23 = fVar9;
147 m_f42 = -fVar3;
148 m_f31 = fVar7;
149 m_f43 = -fVar2;
150 m_f12 = fVar14;
151 m_f44 = fVar1;
152 m_f14 = fVar12;
153 m_f22 = fVar10;
154 m_f24 = fVar8;
155 RotateVector( AsBasisVector4( 3 ), *this, AsBasisVector4( 3 ) );
156}

◆ InvertOrthonormal()

void TMatrix44::InvertOrthonormal ( )

Definition at line 164 of file TMatrix44.cpp.

165{
167
168 std::swap( m_f12, m_f21 );
169 std::swap( m_f13, m_f31 );
170 std::swap( m_f23, m_f32 );
171
172 m_f42 *= -1;
173 m_f41 *= -1;
174 m_f43 *= -1;
175 m_f42 = m_f22 * m_f42 + m_f41 * m_f12 + m_f43 * m_f32;
176 m_f43 = m_f42 * m_f23 + m_f41 * m_f13 + m_f33 * m_f43;
177 m_f41 = m_f42 * m_f21 + m_f41 * m_f11 + m_f43 * m_f31;
178}
constexpr TBOOL IsOrthonormal() const
Definition TMatrix44.h:208

◆ IsOrthonormal()

TBOOL TMatrix44::IsOrthonormal ( ) const
inlineconstexpr

Definition at line 208 of file TMatrix44.h.

209 {
210 TFLOAT fVar1 = ( m_f32 * m_f32 + m_f31 * m_f31 + m_f33 * m_f33 ) - 1.0f;
211 TFLOAT fVar2 = ( m_f22 * m_f22 + m_f21 * m_f21 + m_f23 * m_f23 ) - 1.0f;
212 TFLOAT fVar3 = m_f22 * m_f32 + m_f31 * m_f21 + m_f23 * m_f33;
213 TFLOAT fVar4 = m_f32 * m_f12 + m_f11 * m_f31 + m_f33 * m_f13;
214 TFLOAT fVar5 = m_f22 * m_f12 + m_f11 * m_f21 + m_f23 * m_f13;
215 TFLOAT fVar6 = ( m_f11 * m_f11 + m_f12 * m_f12 + m_f13 * m_f13 ) - 1.0f;
216
217 return !( ( ( 0.01 <= fVar6 * fVar6 + fVar2 * fVar2 + fVar1 * fVar1 + fVar4 * fVar4 + fVar5 * fVar5 + fVar3 * fVar3 ) || ( m_f14 != 0.0 ) ) || ( m_f24 != 0.0 ) ) || ( ( m_f34 != 0.0 || ( m_f44 != 1.0 ) ) );
218 }

◆ LookAtDirection()

void TMatrix44::LookAtDirection ( const TVector4 & a_rVec,
const TVector4 & a_rVec2 )

Definition at line 41 of file TMatrix44.cpp.

42{
43 TVector4 vProjection;
44 TVector4 vCrossProduct;
45
46 vProjection.ProjectNormalToPlane( a_rUpAxis, a_rDirection );
47 vProjection.Multiply( -1.0f );
48 vCrossProduct.CrossProduct( vProjection, a_rDirection );
49
50 AsBasisVector4( 0 ) = vCrossProduct;
51 AsBasisVector4( 0 ).w = 0.0f;
52
53 AsBasisVector4( 1 ) = vProjection;
54 AsBasisVector4( 1 ).w = 0.0f;
55
56 AsBasisVector4( 2 ) = a_rDirection;
57 AsBasisVector4( 2 ).w = 0.0f;
58}
constexpr void Multiply(const TVector4 &vec)
Definition TVector4.h:170
void ProjectNormalToPlane(const TVector4 &vec, const TVector4 &vec2)
Definition TVector4.cpp:55
TFLOAT w
Definition TVector4.h:367
void CrossProduct(const TVector4 &vec1, const TVector4 &vec2)
Definition TVector4.h:223

◆ LookAtTarget()

void TMatrix44::LookAtTarget ( const TVector4 & a_rTarget,
const TVector4 & a_rUp )

Definition at line 25 of file TMatrix44.cpp.

26{
27 auto& forward = AsBasisVector3( 2 );
28
29 forward = target.AsVector3() - up.AsVector3();
30 forward.Normalize();
31
32 AsBasisVector3( 0 ) = { m_f33, 0, -m_f31 };
34
35 m_f22 = m_f11 * m_f33 - m_f13 * m_f31;
36 m_f23 = m_f12 * m_f31 - m_f11 * m_f32;
37 m_f21 = m_f13 * m_f32 - m_f12 * m_f33;
38}
void Normalize()
Definition TVector3.cpp:71

◆ Multiply() [1/2]

void TMatrix44::Multiply ( const TMatrix44 & a_rLeft,
const TMatrix44 & a_rRight )

Definition at line 61 of file TMatrix44.cpp.

62{
63 TASSERT( ( this != &a_rLeft ) && ( this != &a_rRight ) );
64
65 for ( TINT i = 0; i < 4; i++ )
66 {
67 TFLOAT* pBasis = AsBasisVector4( i ).AsArray();
68
69 for ( TINT k = 0; k < 4; k++ )
70 {
71 pBasis[ k ] =
72 a_rLeft.AsBasisVector4( 3 ).AsArray()[ k ] * a_rRight.AsBasisVector4( i ).w +
73 a_rLeft.AsBasisVector4( 2 ).AsArray()[ k ] * a_rRight.AsBasisVector4( i ).z +
74 a_rLeft.AsBasisVector4( 1 ).AsArray()[ k ] * a_rRight.AsBasisVector4( i ).y +
75 a_rLeft.AsBasisVector4( 0 ).AsArray()[ k ] * a_rRight.AsBasisVector4( i ).x;
76 }
77 }
78}
int TINT
Definition Typedefs.h:7
TFLOAT * AsArray()
Definition TVector4.h:318
TFLOAT x
Definition TVector4.h:367
TFLOAT y
Definition TVector4.h:367
TFLOAT z
Definition TVector4.h:367

◆ Multiply() [2/2]

void TMatrix44::Multiply ( const TMatrix44 & a_rRight)

Definition at line 81 of file TMatrix44.cpp.

82{
83 TMatrix44 temp = *this;
84 Multiply( temp, a_rRight );
85}
constexpr TMatrix44()=default
void Multiply(const TMatrix44 &a_rLeft, const TMatrix44 &a_rRight)
Definition TMatrix44.cpp:61

◆ operator=()

void TMatrix44::operator= ( const TMatrix44 & a_rcMatrix)
inlineconstexpr

Definition at line 334 of file TMatrix44.h.

335 {
336 Set(
337 a_rcMatrix.m_f11, a_rcMatrix.m_f12, a_rcMatrix.m_f13, a_rcMatrix.m_f14,
338 a_rcMatrix.m_f21, a_rcMatrix.m_f22, a_rcMatrix.m_f23, a_rcMatrix.m_f24,
339 a_rcMatrix.m_f31, a_rcMatrix.m_f32, a_rcMatrix.m_f33, a_rcMatrix.m_f34,
340 a_rcMatrix.m_f41, a_rcMatrix.m_f42, a_rcMatrix.m_f43, a_rcMatrix.m_f44
341 );
342 }

◆ PushQuaternion()

TMatrix44 & TMatrix44::PushQuaternion ( const TQuaternion & a_rQuaternion,
const TMatrix44 & a_rMatrix,
const TVector3 & a_rOrigin )

Definition at line 210 of file TMatrix44.cpp.

211{
212 TMatrix44 matrix;
213
214 matrix.SetFromQuaternion( a_rQuaternion );
215 matrix.AsBasisVector3( 3 ) = a_rOrigin;
216 Multiply( a_rMatrix, matrix );
217
218 return *this;
219}
TMatrix44 & SetFromQuaternion(const TQuaternion &a_rQuaternion)

◆ RotateVector()

static constexpr void TMatrix44::RotateVector ( TVector4 & a_rOutVector,
const TMatrix44 & a_rMatrix,
const TVector4 & a_rVector )
inlinestaticconstexpr

Definition at line 252 of file TMatrix44.h.

253 {
254 TFLOAT fVar1 = a_rMatrix.m_f32;
255 TFLOAT fVar2 = a_rVector.z;
256 TFLOAT fVar3 = a_rMatrix.m_f12;
257 TFLOAT fVar4 = a_rVector.x;
258 TFLOAT fVar5 = a_rMatrix.m_f22;
259 TFLOAT fVar6 = a_rVector.y;
260 TFLOAT fVar7 = a_rMatrix.m_f33;
261 TFLOAT fVar8 = a_rVector.z;
262 TFLOAT fVar9 = a_rMatrix.m_f13;
263 TFLOAT fVar10 = a_rVector.x;
264 TFLOAT fVar11 = a_rMatrix.m_f23;
265 TFLOAT fVar12 = a_rVector.y;
266 TFLOAT fVar13 = a_rMatrix.m_f31;
267 TFLOAT fVar14 = a_rVector.z;
268 TFLOAT fVar15 = a_rMatrix.m_f21;
269 TFLOAT fVar16 = a_rVector.y;
270 TFLOAT fVar17 = a_rMatrix.m_f11;
271 TFLOAT fVar18 = a_rVector.x;
272
273 a_rOutVector.x = fVar17 * fVar18 + fVar15 * fVar16 + fVar13 * fVar14;
274 a_rOutVector.y = fVar5 * fVar6 + fVar3 * fVar4 + fVar1 * fVar2;
275 a_rOutVector.z = fVar11 * fVar12 + fVar9 * fVar10 + fVar7 * fVar8;
276 a_rOutVector.w = a_rVector.w;
277 }

◆ RotateX()

void TMatrix44::RotateX ( TFLOAT a_fAngle)

Definition at line 222 of file TMatrix44.cpp.

223{
224 TFLOAT fVar1;
225 TFLOAT fVar2;
226 TFLOAT fCos;
227 TFLOAT fSin;
228
229 TMath::SinCos( angle, fSin, fCos );
230 fVar1 = m_f31;
231 m_f31 = fVar1 * fCos - m_f21 * fSin;
232 fVar2 = m_f32;
233 m_f21 = fVar1 * fSin + m_f21 * fCos;
234 fVar1 = m_f23;
235 m_f32 = fVar2 * fCos - m_f22 * fSin;
236 m_f22 = fVar2 * fSin + m_f22 * fCos;
237 m_f23 = m_f33 * fSin + fVar1 * fCos;
238 m_f33 = m_f33 * fCos - fVar1 * fSin;
239}
TFORCEINLINE void SinCos(TFLOAT fVal, TFLOAT &a_rSin, TFLOAT &a_rCos)

◆ RotateY()

void TMatrix44::RotateY ( TFLOAT a_fAngle)

Definition at line 242 of file TMatrix44.cpp.

243{
244 TFLOAT fVar1;
245 TFLOAT fVar2;
246 TFLOAT fSin;
247 TFLOAT fCos;
248
249 TMath::SinCos( angle, fSin, fCos );
250 fVar1 = m_f31;
251 m_f31 = fVar1 * fCos + m_f11 * fSin;
252 fVar2 = m_f32;
253 m_f11 = m_f11 * fCos - fVar1 * fSin;
254 fVar1 = m_f13;
255 m_f32 = fVar2 * fCos + m_f12 * fSin;
256 m_f12 = m_f12 * fCos - fVar2 * fSin;
257 m_f13 = fVar1 * fCos - m_f33 * fSin;
258 m_f33 = m_f33 * fCos + fVar1 * fSin;
259}

◆ RotateZ()

void TMatrix44::RotateZ ( TFLOAT a_fAngle)

Definition at line 262 of file TMatrix44.cpp.

263{
264 TFLOAT fVar1;
265 TFLOAT fVar2;
266 TFLOAT fCos;
267 TFLOAT fSin;
268
269 TMath::SinCos( angle, fSin, fCos );
270 fVar1 = m_f21;
271 m_f21 = fVar1 * fCos - m_f11 * fSin;
272 fVar2 = m_f22;
273 m_f11 = fVar1 * fSin + m_f11 * fCos;
274 fVar1 = m_f13;
275 m_f22 = fVar2 * fCos - m_f12 * fSin;
276 m_f12 = fVar2 * fSin + m_f12 * fCos;
277 m_f13 = m_f23 * fSin + fVar1 * fCos;
278 m_f23 = m_f23 * fCos - fVar1 * fSin;
279}

◆ Scale() [1/3]

void TMatrix44::Scale ( const TVector4 & a_rScalars)
inlineconstexpr

Definition at line 190 of file TMatrix44.h.

191 {
192 m_f11 *= a_rScalars.x;
193 m_f12 *= a_rScalars.x;
194 m_f13 *= a_rScalars.x;
195 m_f21 *= a_rScalars.y;
196 m_f22 *= a_rScalars.y;
197 m_f23 *= a_rScalars.y;
198 m_f31 *= a_rScalars.z;
199 m_f32 *= a_rScalars.z;
200 m_f33 *= a_rScalars.z;
201 }

◆ Scale() [2/3]

void TMatrix44::Scale ( TFLOAT a_fScalar1,
TFLOAT a_fScalar2,
TFLOAT a_fScalar3 )
inlineconstexpr

Definition at line 176 of file TMatrix44.h.

177 {
178 m_f11 *= a_fScalar1;
179 m_f12 *= a_fScalar1;
180 m_f13 *= a_fScalar1;
181 m_f21 *= a_fScalar2;
182 m_f22 *= a_fScalar2;
183 m_f23 *= a_fScalar2;
184 m_f31 *= a_fScalar3;
185 m_f32 *= a_fScalar3;
186 m_f33 *= a_fScalar3;
187 }

◆ Scale() [3/3]

void TMatrix44::Scale ( TFLOAT a_fScale)
inlineconstexpr

Definition at line 203 of file TMatrix44.h.

204 {
205 Scale( a_fScale, a_fScale, a_fScale );
206 }
constexpr void Scale(TFLOAT a_fScalar1, TFLOAT a_fScalar2, TFLOAT a_fScalar3)
Definition TMatrix44.h:176

◆ Set() [1/2]

void TMatrix44::Set ( const TMatrix44 & a_rcMatrix)
inlineconstexpr

Definition at line 99 of file TMatrix44.h.

100 {
101 Set(
102 a_rcMatrix.m_f11, a_rcMatrix.m_f12, a_rcMatrix.m_f13, a_rcMatrix.m_f14,
103 a_rcMatrix.m_f21, a_rcMatrix.m_f22, a_rcMatrix.m_f23, a_rcMatrix.m_f24,
104 a_rcMatrix.m_f31, a_rcMatrix.m_f32, a_rcMatrix.m_f33, a_rcMatrix.m_f34,
105 a_rcMatrix.m_f41, a_rcMatrix.m_f42, a_rcMatrix.m_f43, a_rcMatrix.m_f44
106 );
107 }

◆ Set() [2/2]

void TMatrix44::Set ( TFLOAT a_f11,
TFLOAT a_f12,
TFLOAT a_f13,
TFLOAT a_f14,
TFLOAT a_f21,
TFLOAT a_f22,
TFLOAT a_f23,
TFLOAT a_f24,
TFLOAT a_f31,
TFLOAT a_f32,
TFLOAT a_f33,
TFLOAT a_f34,
TFLOAT a_f41,
TFLOAT a_f42,
TFLOAT a_f43,
TFLOAT a_f44 )
inlineconstexpr

Definition at line 62 of file TMatrix44.h.

80 {
81 m_f11 = a_f11;
82 m_f12 = a_f12;
83 m_f13 = a_f13;
84 m_f14 = a_f14;
85 m_f21 = a_f21;
86 m_f22 = a_f22;
87 m_f23 = a_f23;
88 m_f24 = a_f24;
89 m_f31 = a_f31;
90 m_f32 = a_f32;
91 m_f33 = a_f33;
92 m_f34 = a_f34;
93 m_f41 = a_f41;
94 m_f42 = a_f42;
95 m_f43 = a_f43;
96 m_f44 = a_f44;
97 }

◆ SetFromQuaternion()

TMatrix44 & TMatrix44::SetFromQuaternion ( const TQuaternion & a_rQuaternion)

Definition at line 181 of file TMatrix44.cpp.

182{
183 TFLOAT fVal1 = a_rQuaternion.z * 2.0f;
184 TFLOAT fVal2 = a_rQuaternion.y * 2.0f;
185 TFLOAT fVal3 = a_rQuaternion.x * 2.0f * a_rQuaternion.w;
186 TFLOAT fVal4 = a_rQuaternion.x * 2.0f * a_rQuaternion.x;
187 TFLOAT fVal5 = fVal1 * a_rQuaternion.z;
188
189 m_f14 = 0.0f;
190 m_f24 = 0.0f;
191 m_f34 = 0.0f;
192 m_f41 = 0.0f;
193 m_f42 = 0.0f;
194 m_f43 = 0.0f;
195 m_f44 = 1.0f;
196 m_f11 = 1.0f - ( fVal5 + fVal2 * a_rQuaternion.y );
197 m_f21 = fVal2 * a_rQuaternion.x - fVal1 * a_rQuaternion.w;
198 m_f12 = fVal2 * a_rQuaternion.x + fVal1 * a_rQuaternion.w;
199 m_f31 = fVal1 * a_rQuaternion.x + fVal2 * a_rQuaternion.w;
200 m_f13 = fVal1 * a_rQuaternion.x - fVal2 * a_rQuaternion.w;
201 m_f22 = 1.0f - ( fVal5 + fVal4 );
202 m_f32 = fVal1 * a_rQuaternion.y - fVal3;
203 m_f23 = fVal1 * a_rQuaternion.y + fVal3;
204 m_f33 = 1.0f - ( fVal2 * a_rQuaternion.y + fVal4 );
205
206 return *this;
207}

◆ SetTranslation()

void TMatrix44::SetTranslation ( const TVector4 & a_rTranslation)
inline

Definition at line 167 of file TMatrix44.h.

168 {
169 GetTranslation() = a_rTranslation;
170 }
TVector4 & GetTranslation()
Definition TMatrix44.h:157

◆ TransformPlaneOrthogonal()

static void TMatrix44::TransformPlaneOrthogonal ( TPlane & a_rOutPlane,
const TMatrix44 & a_rMatrix,
const TPlane & a_rcSourcePlane )
inlinestatic

Definition at line 239 of file TMatrix44.h.

240 {
241 RotateVector( a_rOutPlane.AsVector4(), a_rMatrix, a_rcSourcePlane.AsVector4() );
242
243 a_rOutPlane.SetD(
244 a_rcSourcePlane.GetD() +
246 a_rOutPlane.AsVector4(), a_rMatrix.AsBasisVector4( BASISVECTOR_TRANSLATION )
247 )
248 );
249 }
TFORCEINLINE TVector4 & AsVector4()
Definition TPlane.h:124
TFORCEINLINE constexpr TFLOAT GetD() const
Definition TPlane.h:69
TFORCEINLINE constexpr void SetD(TFLOAT a_fDistance)
Definition TPlane.h:74
TFLOAT constexpr DotProduct3(const TVector4 &vec) const
Definition TVector4.h:339

◆ TransformVector() [1/2]

static constexpr void TMatrix44::TransformVector ( TVector3 & a_rOutVector,
const TMatrix44 & a_rMatrix,
const TVector3 & a_rVector )
inlinestaticconstexpr

Definition at line 280 of file TMatrix44.h.

281 {
282 TFLOAT fVar1 = a_rMatrix.m_f32;
283 TFLOAT fVar2 = a_rVector.z;
284 TFLOAT fVar3 = a_rMatrix.m_f12;
285 TFLOAT fVar4 = a_rVector.x;
286 TFLOAT fVar5 = a_rMatrix.m_f22;
287 TFLOAT fVar6 = a_rVector.y;
288 TFLOAT fVar7 = a_rMatrix.m_f42;
289 TFLOAT fVar8 = a_rMatrix.m_f33;
290 TFLOAT fVar9 = a_rVector.z;
291 TFLOAT fVar10 = a_rMatrix.m_f13;
292 TFLOAT fVar11 = a_rVector.x;
293 TFLOAT fVar12 = a_rMatrix.m_f23;
294 TFLOAT fVar13 = a_rVector.y;
295 TFLOAT fVar14 = a_rMatrix.m_f43;
296 a_rOutVector.x = a_rMatrix.m_f11 * a_rVector.x + a_rMatrix.m_f21 * a_rVector.y + a_rMatrix.m_f31 * a_rVector.z + a_rMatrix.m_f41;
297 a_rOutVector.y = fVar5 * fVar6 + fVar3 * fVar4 + fVar1 * fVar2 + fVar7;
298 a_rOutVector.z = fVar12 * fVar13 + fVar10 * fVar11 + fVar8 * fVar9 + fVar14;
299 }

◆ TransformVector() [2/2]

static constexpr void TMatrix44::TransformVector ( TVector4 & a_rOutVector,
const TMatrix44 & a_rMatrix,
const TVector4 & a_rVector )
inlinestaticconstexpr

Definition at line 302 of file TMatrix44.h.

303 {
304 TFLOAT fVar1 = a_rMatrix.m_f42;
305 TFLOAT fVar2 = a_rVector.w;
306 TFLOAT fVar3 = a_rMatrix.m_f12;
307 TFLOAT fVar4 = a_rVector.x;
308 TFLOAT fVar5 = a_rMatrix.m_f32;
309 TFLOAT fVar6 = a_rVector.z;
310 TFLOAT fVar7 = a_rMatrix.m_f22;
311 TFLOAT fVar8 = a_rVector.y;
312 TFLOAT fVar9 = a_rMatrix.m_f43;
313 TFLOAT fVar10 = a_rVector.w;
314 TFLOAT fVar11 = a_rMatrix.m_f13;
315 TFLOAT fVar12 = a_rVector.x;
316 TFLOAT fVar13 = a_rMatrix.m_f33;
317 TFLOAT fVar14 = a_rVector.z;
318 TFLOAT fVar15 = a_rMatrix.m_f23;
319 TFLOAT fVar16 = a_rVector.y;
320 TFLOAT fVar17 = a_rMatrix.m_f41;
321 TFLOAT fVar18 = a_rVector.w;
322 TFLOAT fVar19 = a_rMatrix.m_f31;
323 TFLOAT fVar20 = a_rVector.z;
324 TFLOAT fVar21 = a_rMatrix.m_f21;
325 TFLOAT fVar22 = a_rVector.y;
326 TFLOAT fVar23 = a_rMatrix.m_f11;
327 TFLOAT fVar24 = a_rVector.x;
328 a_rOutVector.w = a_rMatrix.m_f24 * a_rVector.y + a_rMatrix.m_f34 * a_rVector.z + a_rMatrix.m_f14 * a_rVector.x + a_rMatrix.m_f44 * a_rVector.w;
329 a_rOutVector.x = fVar23 * fVar24 + fVar21 * fVar22 + fVar19 * fVar20 + fVar17 * fVar18;
330 a_rOutVector.y = fVar7 * fVar8 + fVar5 * fVar6 + fVar3 * fVar4 + fVar1 * fVar2;
331 a_rOutVector.z = fVar15 * fVar16 + fVar13 * fVar14 + fVar11 * fVar12 + fVar9 * fVar10;
332 }

Member Data Documentation

◆ IDENTITY

TMatrix44 TMatrix44::IDENTITY
staticconstinit

Definition at line 357 of file TMatrix44.h.

◆ m_f11

TFLOAT TMatrix44::m_f11

Definition at line 360 of file TMatrix44.h.

◆ m_f12

TFLOAT TMatrix44::m_f12

Definition at line 360 of file TMatrix44.h.

◆ m_f13

TFLOAT TMatrix44::m_f13

Definition at line 360 of file TMatrix44.h.

◆ m_f14

TFLOAT TMatrix44::m_f14

Definition at line 360 of file TMatrix44.h.

◆ m_f21

TFLOAT TMatrix44::m_f21

Definition at line 361 of file TMatrix44.h.

◆ m_f22

TFLOAT TMatrix44::m_f22

Definition at line 361 of file TMatrix44.h.

◆ m_f23

TFLOAT TMatrix44::m_f23

Definition at line 361 of file TMatrix44.h.

◆ m_f24

TFLOAT TMatrix44::m_f24

Definition at line 361 of file TMatrix44.h.

◆ m_f31

TFLOAT TMatrix44::m_f31

Definition at line 362 of file TMatrix44.h.

◆ m_f32

TFLOAT TMatrix44::m_f32

Definition at line 362 of file TMatrix44.h.

◆ m_f33

TFLOAT TMatrix44::m_f33

Definition at line 362 of file TMatrix44.h.

◆ m_f34

TFLOAT TMatrix44::m_f34

Definition at line 362 of file TMatrix44.h.

◆ m_f41

TFLOAT TMatrix44::m_f41

Definition at line 363 of file TMatrix44.h.

◆ m_f42

TFLOAT TMatrix44::m_f42

Definition at line 363 of file TMatrix44.h.

◆ m_f43

TFLOAT TMatrix44::m_f43

Definition at line 363 of file TMatrix44.h.

◆ m_f44

TFLOAT TMatrix44::m_f44

Definition at line 363 of file TMatrix44.h.


The documentation for this class was generated from the following files: