UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Matrix.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "HAL/UnrealMemory.h"
9#include "Math/MathFwd.h" // IWYU pragma: export
10#include "Math/Vector.h"
11#include "Math/Vector4.h"
12#include "Math/Plane.h"
13#include "Math/Rotator.h"
14#include "Math/Axis.h"
17#include <type_traits>
18
20
21#ifdef _MSC_VER
22#pragma warning (push)
23// Ensure template functions don't generate shadowing warnings against global variables at the point of instantiation.
24#pragma warning (disable : 4459)
25#endif
26
36namespace UE
37{
38namespace Math
39{
40
41template<typename T>
42struct alignas(16) TMatrix
43{
44 static_assert(std::is_floating_point_v<T>, "T must be floating point");
45
46public:
47 using FReal = T;
48
49 alignas(16) T M[4][4];
50
51
53
54
55#if ENABLE_NAN_DIAGNOSTIC
56 inline void DiagnosticCheckNaN() const
57 {
58 if (ContainsNaN())
59 {
60 logOrEnsureNanError(TEXT("FMatrix contains NaN: %s"), *ToString());
61 *const_cast<TMatrix<T>*>(static_cast<const TMatrix<T>*>(this)) = TMatrix<T>(ForceInitToZero);
62 }
63 }
64#else
65 void DiagnosticCheckNaN() const {}
66#endif
67
68
69 // Constructors.
70 [[nodiscard]] TMatrix() = default;
71
78 {
79 FMemory::Memzero(this, sizeof(*this));
80 }
81
90 [[nodiscard]] TMatrix(const TPlane<T>& InX, const TPlane<T>& InY, const TPlane<T>& InZ, const TPlane<T>& InW);
91
100 [[nodiscard]] TMatrix(const TVector<T>& InX, const TVector<T>& InY, const TVector<T>& InZ, const TVector<T>& InW);
101
102 // Set this to the identity matrix
103 inline void SetIdentity();
104
112
119 void operator*=(const TMatrix<T>& Other);
120
128
135 void operator+=(const TMatrix<T>& Other);
136
141
148 void operator*=(T Other);
149
156 [[nodiscard]] inline bool operator==(const TMatrix<T>& Other) const;
157
165 [[nodiscard]] inline bool Equals(const TMatrix<T>& Other, T Tolerance = UE_KINDA_SMALL_NUMBER) const;
166
173 [[nodiscard]] inline bool operator!=(const TMatrix<T>& Other) const;
174
175 // Homogeneous transform.
177
180
183
189
195
196 // Transpose.
197
199
200 // @return determinant of this matrix.
201
202 [[nodiscard]] inline T Determinant() const;
203
205 [[nodiscard]] inline T RotDeterminant() const;
206
208 [[nodiscard]] inline TMatrix<T> InverseFast() const;
209
211 [[nodiscard]] inline TMatrix<T> Inverse() const;
212
213 [[nodiscard]] inline TMatrix<T> TransposeAdjoint() const;
214
215 // NOTE: There is some compiler optimization issues with WIN64 that cause FORCEINLINE to cause a crash
216 // Remove any scaling from this matrix (ie magnitude of each row is 1) with error Tolerance
217 inline void RemoveScaling(T Tolerance = UE_SMALL_NUMBER);
218
219 // Returns matrix after RemoveScaling with error Tolerance
220 [[nodiscard]] inline TMatrix<T> GetMatrixWithoutScale(T Tolerance = UE_SMALL_NUMBER) const;
221
223 inline TVector<T> ExtractScaling(T Tolerance = UE_SMALL_NUMBER);
224
226 [[nodiscard]] inline TVector<T> GetScaleVector(T Tolerance = UE_SMALL_NUMBER) const;
227
228 // Remove any translation from this matrix
229 [[nodiscard]] inline TMatrix<T> RemoveTranslation() const;
230
233
235 [[nodiscard]] inline bool ContainsNaN() const;
236
238 inline void ScaleTranslation(const TVector<T>& Scale3D);
239
241 [[nodiscard]] inline T GetMinimumAxisScale() const;
242
244 [[nodiscard]] inline T GetMaximumAxisScale() const;
245
247 [[nodiscard]] inline TMatrix<T> ApplyScale(T Scale) const;
248
249 // @return the origin of the co-ordinate system
250 [[nodiscard]] inline TVector<T> GetOrigin() const;
251
259
267 inline void GetScaledAxes(TVector<T>& X, TVector<T>& Y, TVector<T>& Z) const;
268
276
284 inline void GetUnitAxes(TVector<T>& X, TVector<T>& Y, TVector<T>& Z) const;
285
292 inline void SetAxis(int32 i, const TVector<T>& Axis);
293
294 // Set the origin of the coordinate system to the given vector
295 inline void SetOrigin(const TVector<T>& NewOrigin);
296
305 inline void SetAxes(const TVector<T>* Axis0 = NULL, const TVector<T>* Axis1 = NULL, const TVector<T>* Axis2 = NULL, const TVector<T>* Origin = NULL);
306
313 [[nodiscard]] inline TVector<T> GetColumn(int32 i) const;
314
321 inline void SetColumn(int32 i, TVector<T> Value);
322
325
332
336 void To3x4MatrixTranspose(T* Out) const;
337
338 // Frustum plane extraction.
341
344
347
350
353
356
360 inline void Mirror(EAxis::Type MirrorAxis, EAxis::Type FlipAxis);
361
367 [[nodiscard]] FString ToString() const
368 {
369 FString Output;
370
371 Output += FString::Printf(TEXT("[%g %g %g %g] "), M[0][0], M[0][1], M[0][2], M[0][3]);
372 Output += FString::Printf(TEXT("[%g %g %g %g] "), M[1][0], M[1][1], M[1][2], M[1][3]);
373 Output += FString::Printf(TEXT("[%g %g %g %g] "), M[2][0], M[2][1], M[2][2], M[2][3]);
374 Output += FString::Printf(TEXT("[%g %g %g %g] "), M[3][0], M[3][1], M[3][2], M[3][3]);
375
376 return Output;
377 }
378
380 void DebugPrint() const
381 {
382 UE_LOG(LogUnrealMath, Log, TEXT("%s"), *ToString());
383 }
384
387 {
388 uint32 Ret = 0;
389
390 const uint32* Data = (uint32*)this;
391
392 for (uint32 i = 0; i < 16; ++i)
393 {
394 Ret ^= Data[i] + i;
395 }
396
397 return Ret;
398 }
399
401 {
402 //if (Ar.UEVer() >= VER_UE4_ADDED_NATIVE_SERIALIZATION_FOR_IMMUTABLE_STRUCTURES)
403 {
404 Ar << (TMatrix<T>&)*this;
405 return true;
406 }
407 //return false;
408 }
409
411 {
412 if constexpr (std::is_same_v<T, float>)
413 {
414 return UE_SERIALIZE_VARIANT_FROM_MISMATCHED_TAG(Ar, Matrix, Matrix44f, Matrix44d);
415 }
416 else
417 {
418 return UE_SERIALIZE_VARIANT_FROM_MISMATCHED_TAG(Ar, Matrix, Matrix44d, Matrix44f);
419 }
420 }
421
422 // Conversion to other type.
423 template<typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
424 explicit TMatrix(const TMatrix<FArg>& From)
425 {
426#if PLATFORM_ENABLE_VECTORINTRINSICS
427 const FArg* RESTRICT Src = &(From.M[0][0]);
428 T* RESTRICT Dest = &(M[0][0]);
429
430 // Load src
435
436 // Coerce and store
437 if constexpr (std::is_same_v<T, float>)
438 {
443 }
444 else
445 {
450 }
451#else
452 M[0][0] = (T)From.M[0][0]; M[0][1] = (T)From.M[0][1]; M[0][2] = (T)From.M[0][2]; M[0][3] = (T)From.M[0][3];
453 M[1][0] = (T)From.M[1][0]; M[1][1] = (T)From.M[1][1]; M[1][2] = (T)From.M[1][2]; M[1][3] = (T)From.M[1][3];
454 M[2][0] = (T)From.M[2][0]; M[2][1] = (T)From.M[2][1]; M[2][2] = (T)From.M[2][2]; M[2][3] = (T)From.M[2][3];
455 M[3][0] = (T)From.M[3][0]; M[3][1] = (T)From.M[3][1]; M[3][2] = (T)From.M[3][2]; M[3][3] = (T)From.M[3][3];
456#endif
457
459 }
460
461private:
462
466 static void ErrorEnsure(const TCHAR* Message)
467 {
468 UE_LOG(LogUnrealMath, Error, TEXT("%s"), Message);
469 ensureMsgf(false, TEXT("%s"), Message);
470 }
471};
472
473#if !defined(_MSC_VER) || defined(__clang__) // MSVC can't forward declare explicit specializations
476#endif
477
478
487{
488 Ar << M.M[0][0] << M.M[0][1] << M.M[0][2] << M.M[0][3];
489 Ar << M.M[1][0] << M.M[1][1] << M.M[1][2] << M.M[1][3];
490 Ar << M.M[2][0] << M.M[2][1] << M.M[2][2] << M.M[2][3];
491 Ar << M.M[3][0] << M.M[3][1] << M.M[3][2] << M.M[3][3];
493 return Ar;
494}
495
504{
506 {
507 Ar << M.M[0][0] << M.M[0][1] << M.M[0][2] << M.M[0][3];
508 Ar << M.M[1][0] << M.M[1][1] << M.M[1][2] << M.M[1][3];
509 Ar << M.M[2][0] << M.M[2][1] << M.M[2][2] << M.M[2][3];
510 Ar << M.M[3][0] << M.M[3][1] << M.M[3][2] << M.M[3][3];
511 }
512 else
513 {
514 checkf(Ar.IsLoading(), TEXT("float -> double conversion applied outside of load!"));
515 // Stored as floats, so serialize float and copy.
516 for (int32 Row = 0; Row < 4; ++Row)
517 {
518 float Col0, Col1, Col2, Col3;
519 Ar << Col0 << Col1 << Col2 << Col3;
520 M.M[Row][0] = Col0;
521 M.M[Row][1] = Col1;
522 M.M[Row][2] = Col2;
523 M.M[Row][3] = Col3;
524 }
525 }
527 return Ar;
528}
529
530template<typename T>
531struct TBasisVectorMatrix : public TMatrix<T>
532{
533 using TMatrix<T>::M;
534
535 // Create Basis matrix from 3 axis vectors and the origin
536 TBasisVectorMatrix(const TVector<T>& XAxis,const TVector<T>& YAxis,const TVector<T>& ZAxis,const TVector<T>& Origin);
537
538 // Conversion to other type.
539 template<typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
541 : TMatrix<T>(From)
542 {
543 }
544};
545
546
547template<typename T>
548struct TLookFromMatrix : public TMatrix<T>
549{
550 using TMatrix<T>::M;
551
559
560 // Conversion to other type.
561 template<typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
563 : TMatrix<T>(From)
564 {
565 }
566};
567
568
569template<typename T>
571{
572 using TLookFromMatrix<T>::M;
573
581
582 // Conversion to other type.
583 template<typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
584 explicit TLookAtMatrix(const TLookAtMatrix<FArg>& From)
585 : TLookFromMatrix<T>(From)
586 {
587 }
588};
589
590} // namespace UE::Math
591} // namespace UE
592
597
598#define UE_DECLARE_MATRIX_TYPE_TRAITS(TYPE) \
599template<> struct TIsPODType<F##TYPE##44f> { enum { Value = true }; }; \
600template<> struct TIsUECoreVariant<F##TYPE##44f> { enum { Value = true }; }; \
601template<> struct TIsPODType<F##TYPE##44d> { enum { Value = true }; }; \
602template<> struct TIsUECoreVariant<F##TYPE##44d> { enum { Value = true }; }; \
603
608
609#undef UE_DECLARE_MATRIX_TYPE_TRAITS
610
611// Forward declare all explicit specializations (in UnrealMath.cpp)
612template<> CORE_API FQuat4f FMatrix44f::ToQuat() const;
613template<> CORE_API FQuat4d FMatrix44d::ToQuat() const;
614
615
616// very high quality 4x4 matrix inverse
617// @todo: this is redundant with FMatrix44d::Inverse and should be removed ; seems to be unused
618template<typename FArg UE_REQUIRES(std::is_floating_point_v<FArg>)>
619static inline bool Inverse4x4( double* dst, const FArg* src )
620{
621 const double s0 = (double)(src[ 0]); const double s1 = (double)(src[ 1]); const double s2 = (double)(src[ 2]); const double s3 = (double)(src[ 3]);
622 const double s4 = (double)(src[ 4]); const double s5 = (double)(src[ 5]); const double s6 = (double)(src[ 6]); const double s7 = (double)(src[ 7]);
623 const double s8 = (double)(src[ 8]); const double s9 = (double)(src[ 9]); const double s10 = (double)(src[10]); const double s11 = (double)(src[11]);
624 const double s12 = (double)(src[12]); const double s13 = (double)(src[13]); const double s14 = (double)(src[14]); const double s15 = (double)(src[15]);
625
626 double inv[16];
627 inv[0] = s5 * s10 * s15 - s5 * s11 * s14 - s9 * s6 * s15 + s9 * s7 * s14 + s13 * s6 * s11 - s13 * s7 * s10;
628 inv[1] = -s1 * s10 * s15 + s1 * s11 * s14 + s9 * s2 * s15 - s9 * s3 * s14 - s13 * s2 * s11 + s13 * s3 * s10;
629 inv[2] = s1 * s6 * s15 - s1 * s7 * s14 - s5 * s2 * s15 + s5 * s3 * s14 + s13 * s2 * s7 - s13 * s3 * s6;
630 inv[3] = -s1 * s6 * s11 + s1 * s7 * s10 + s5 * s2 * s11 - s5 * s3 * s10 - s9 * s2 * s7 + s9 * s3 * s6;
631 inv[4] = -s4 * s10 * s15 + s4 * s11 * s14 + s8 * s6 * s15 - s8 * s7 * s14 - s12 * s6 * s11 + s12 * s7 * s10;
632 inv[5] = s0 * s10 * s15 - s0 * s11 * s14 - s8 * s2 * s15 + s8 * s3 * s14 + s12 * s2 * s11 - s12 * s3 * s10;
633 inv[6] = -s0 * s6 * s15 + s0 * s7 * s14 + s4 * s2 * s15 - s4 * s3 * s14 - s12 * s2 * s7 + s12 * s3 * s6;
634 inv[7] = s0 * s6 * s11 - s0 * s7 * s10 - s4 * s2 * s11 + s4 * s3 * s10 + s8 * s2 * s7 - s8 * s3 * s6;
635 inv[8] = s4 * s9 * s15 - s4 * s11 * s13 - s8 * s5 * s15 + s8 * s7 * s13 + s12 * s5 * s11 - s12 * s7 * s9;
636 inv[9] = -s0 * s9 * s15 + s0 * s11 * s13 + s8 * s1 * s15 - s8 * s3 * s13 - s12 * s1 * s11 + s12 * s3 * s9;
637 inv[10] = s0 * s5 * s15 - s0 * s7 * s13 - s4 * s1 * s15 + s4 * s3 * s13 + s12 * s1 * s7 - s12 * s3 * s5;
638 inv[11] = -s0 * s5 * s11 + s0 * s7 * s9 + s4 * s1 * s11 - s4 * s3 * s9 - s8 * s1 * s7 + s8 * s3 * s5;
639 inv[12] = -s4 * s9 * s14 + s4 * s10 * s13 + s8 * s5 * s14 - s8 * s6 * s13 - s12 * s5 * s10 + s12 * s6 * s9;
640 inv[13] = s0 * s9 * s14 - s0 * s10 * s13 - s8 * s1 * s14 + s8 * s2 * s13 + s12 * s1 * s10 - s12 * s2 * s9;
641 inv[14] = -s0 * s5 * s14 + s0 * s6 * s13 + s4 * s1 * s14 - s4 * s2 * s13 - s12 * s1 * s6 + s12 * s2 * s5;
642 inv[15] = s0 * s5 * s10 - s0 * s6 * s9 - s4 * s1 * s10 + s4 * s2 * s9 + s8 * s1 * s6 - s8 * s2 * s5;
643
644 double det = s0 * inv[0] + s1 * inv[4] + s2 * inv[8] + s3 * inv[12];
645 if( det == 0.0 || !FMath::IsFinite(det) )
646 {
648 return false;
649 }
650
651 det = 1.0 / det;
652 for( int i = 0; i < 16; i++ )
653 {
654 dst[i] = inv[i] * det;
655 }
656 return true;
657}
658
659#include "Math/Matrix.inl" // IWYU pragma: export
660
661#ifdef _MSC_VER
662#pragma warning (pop)
663#endif
#define NULL
Definition oodle2base.h:134
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
EForceInit
Definition CoreMiscDefines.h:154
@ ForceInitToZero
Definition CoreMiscDefines.h:156
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RESTRICT
Definition Platform.h:706
#define UE_DECLARE_MATRIX_TYPE_TRAITS(TYPE)
Definition Matrix.h:598
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define X(Name, Desc)
Definition FormatStringSan.h:47
#define UE_SERIALIZE_VARIANT_FROM_MISMATCHED_TAG(AR_OR_SLOT, ALIAS, TYPE, ALT_TYPE)
Definition LargeWorldCoordinatesSerializer.h:9
#define UE_DECLARE_LWC_TYPE(...)
Definition LargeWorldCoordinates.h:27
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define logOrEnsureNanError(_FormatString_,...)
Definition LogMacros.h:436
char * dst
Definition lz4.h:735
FORCEINLINE void VectorStore(const VectorRegister4Float &Vec, float *Dst)
Definition UnrealMathFPU.h:566
FORCEINLINE VectorRegister4Float VectorLoad(const float *Ptr)
Definition UnrealMathFPU.h:394
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatFromDouble(const VectorRegister4Double &Vec4d)
Definition UnrealMathFPU.h:262
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
typename UE::Math::VectorRegisterPrivate::TVectorRegisterTypeHelper< T >::Type TVectorRegisterType
Definition VectorRegister.h:49
memcpy(InputBufferBase, BinkBlocksData, BinkBlocksSize)
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
UE_FORCEINLINE_HINT FPackageFileVersion UEVer() const
Definition Archive.h:204
Definition NameTypes.h:617
Type
Definition Axis.h:11
FArchive & operator<<(FArchive &Ar, TBoxSphereBounds< float, float > &Bounds)
Definition BoxSphereBounds.h:396
Definition AdvancedWidgetsModule.cpp:13
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition Matrix.h:532
TBasisVectorMatrix(const TBasisVectorMatrix< FArg > &From)
Definition Matrix.h:540
Definition Matrix.h:571
TLookAtMatrix(const TLookAtMatrix< FArg > &From)
Definition Matrix.h:584
Definition Matrix.h:549
TLookFromMatrix(const TLookFromMatrix< FArg > &From)
Definition Matrix.h:562
Definition Matrix.h:43
void SetColumn(int32 i, TVector< T > Value)
Definition Matrix.inl:747
FString ToString() const
Definition Matrix.h:367
TMatrix< T > Inverse() const
Definition Matrix.inl:384
TVector4< T > TransformPosition(const TVector< T > &V) const
Definition Matrix.inl:184
TMatrix(EForceInit)
Definition Matrix.h:77
TVector4< T > TransformVector(const TVector< T > &V) const
Definition Matrix.inl:204
T GetMinimumAxisScale() const
Definition Matrix.inl:604
TMatrix< T > TransposeAdjoint() const
Definition Matrix.inl:404
TMatrix< T > operator+(const TMatrix< T > &Other) const
Definition Matrix.inl:76
T M[4][4]
Definition Matrix.h:49
void DiagnosticCheckNaN() const
Definition Matrix.h:65
bool GetFrustumBottomPlane(TPlane< T > &OuTPln) const
Definition Matrix.inl:831
void To3x4MatrixTranspose(T *Out) const
Definition Matrix.inl:252
uint32 ComputeHash() const
Definition Matrix.h:386
TVector< T > GetUnitAxis(EAxis::Type Axis) const
Definition Matrix.inl:676
bool GetFrustumLeftPlane(TPlane< T > &OuTPln) const
Definition Matrix.inl:795
TVector< T > GetColumn(int32 i) const
Definition Matrix.inl:740
bool operator!=(const TMatrix< T > &Other) const
Definition Matrix.inl:161
TVector< T > InverseTransformVector(const TVector< T > &V) const
Definition Matrix.inl:211
bool GetFrustumNearPlane(TPlane< T > &OuTPln) const
Definition Matrix.inl:771
TMatrix< T > ApplyScale(T Scale) const
Definition Matrix.inl:898
TMatrix< T > GetMatrixWithoutScale(T Tolerance=UE_SMALL_NUMBER) const
Definition Matrix.inl:458
T GetMaximumAxisScale() const
Definition Matrix.inl:618
bool GetFrustumFarPlane(TPlane< T > &OuTPln) const
Definition Matrix.inl:783
CORE_API UE::Math::TQuat< T > ToQuat() const
TVector< T > ExtractScaling(T Tolerance=UE_SMALL_NUMBER)
Definition Matrix.inl:467
bool ContainsNaN() const
Definition Matrix.inl:586
bool GetFrustumRightPlane(TPlane< T > &OuTPln) const
Definition Matrix.inl:807
TMatrix< T > ConcatTranslation(const TVector< T > &Translation) const
Definition Matrix.inl:555
TVector< T > GetScaleVector(T Tolerance=UE_SMALL_NUMBER) const
Definition Matrix.inl:523
TMatrix< T > RemoveTranslation() const
Definition Matrix.inl:545
TMatrix< T > GetTransposed() const
Definition Matrix.inl:221
bool SerializeFromMismatchedTag(FName StructTag, FArchive &Ar)
Definition Matrix.h:410
void SetIdentity()
Definition Matrix.inl:48
bool Serialize(FArchive &Ar)
Definition Matrix.h:400
TVector< T > GetScaledAxis(EAxis::Type Axis) const
Definition Matrix.inl:647
bool GetFrustumTopPlane(TPlane< T > &OuTPln) const
Definition Matrix.inl:819
void GetUnitAxes(TVector< T > &X, TVector< T > &Y, TVector< T > &Z) const
Definition Matrix.inl:682
TMatrix< T > InverseFast() const
Definition Matrix.inl:357
TVector4< T > TransformFVector4(const TVector4< T > &V) const
Definition Matrix.inl:170
void GetScaledAxes(TVector< T > &X, TVector< T > &Y, TVector< T > &Z) const
Definition Matrix.inl:668
CORE_API UE::Math::TRotator< T > Rotator() const
Definition UnrealMath.cpp:597
T FReal
Definition Matrix.h:47
void operator+=(const TMatrix< T > &Other)
Definition Matrix.inl:93
void SetAxis(int32 i, const TVector< T > &Axis)
Definition Matrix.inl:691
TMatrix(const TMatrix< FArg > &From)
Definition Matrix.h:424
static CORE_API const TMatrix Identity
Definition Matrix.h:52
bool operator==(const TMatrix< T > &Other) const
Definition Matrix.inl:126
TVector< T > GetOrigin() const
Definition Matrix.inl:641
void DebugPrint() const
Definition Matrix.h:380
T Determinant() const
Definition Matrix.inl:318
void ScaleTranslation(const TVector< T > &Scale3D)
Definition Matrix.inl:631
void RemoveScaling(T Tolerance=UE_SMALL_NUMBER)
Definition Matrix.inl:435
void operator*=(const TMatrix< T > &Other)
Definition Matrix.inl:58
TMatrix< T > operator*(const TMatrix< T > &Other) const
Definition Matrix.inl:66
TVector< T > InverseTransformPosition(const TVector< T > &V) const
Definition Matrix.inl:191
void SetOrigin(const TVector< T > &NewOrigin)
Definition Matrix.inl:701
void SetAxes(const TVector< T > *Axis0=NULL, const TVector< T > *Axis1=NULL, const TVector< T > *Axis2=NULL, const TVector< T > *Origin=NULL)
Definition Matrix.inl:710
T RotDeterminant() const
Definition Matrix.inl:344
Definition Plane.h:35
Definition Quat.h:39
Definition Rotator.h:37
Definition Vector4.h:30
Definition Vector.h:51