UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PerspectiveMatrix.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"
7#include "Math/Plane.h"
8#include "Math/Matrix.h"
9
10namespace UE {
11namespace Math {
12
13template<typename T>
15 : public TMatrix<T>
16{
17public:
18
19// Note: the value of this must match the mirror in Common.usf!
20#define Z_PRECISION 0.0f
21
32 TPerspectiveMatrix(T HalfFOVX, T HalfFOVY, T MultFOVX, T MultFOVY, T MinZ, T MaxZ);
33
44 TPerspectiveMatrix(T HalfFOV, T Width, T Height, T MinZ, T MaxZ);
45
55 TPerspectiveMatrix(T HalfFOV, T Width, T Height, T MinZ);
56
57 // Conversion to other type.
58 template<typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
60 : TMatrix<T>(From)
61 {
62 }
63};
64
65
66template<typename T>
68{
69public:
71 TReversedZPerspectiveMatrix(T HalfFOV, T Width, T Height, T MinZ, T MaxZ);
72 TReversedZPerspectiveMatrix(T HalfFOV, T Width, T Height, T MinZ);
73
74 // Conversion to other type.
75 template<typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
77 : TMatrix<T>(From)
78 {
79 }
80};
81
82
83#ifdef _MSC_VER
84#pragma warning (push)
85// Disable possible division by 0 warning
86#pragma warning (disable : 4723)
87#endif
88
89
90template<typename T>
92 : TMatrix<T>(
93 TPlane<T>(MultFOVX / FMath::Tan(HalfFOVX), 0.0f, 0.0f, 0.0f),
94 TPlane<T>(0.0f, MultFOVY / FMath::Tan(HalfFOVY), 0.0f, 0.0f),
95 TPlane<T>(0.0f, 0.0f, ((MinZ == MaxZ) ? (1.0f - Z_PRECISION) : MaxZ / (MaxZ - MinZ)), 1.0f),
96 TPlane<T>(0.0f, 0.0f, -MinZ * ((MinZ == MaxZ) ? (1.0f - Z_PRECISION) : MaxZ / (MaxZ - MinZ)), 0.0f)
97 )
98{ }
99
100
101template<typename T>
102inline TPerspectiveMatrix<T>::TPerspectiveMatrix(T HalfFOV, T Width, T Height, T MinZ, T MaxZ)
103 : TMatrix<T>(
104 TPlane<T>(1.0f / FMath::Tan(HalfFOV), 0.0f, 0.0f, 0.0f),
105 TPlane<T>(0.0f, Width / FMath::Tan(HalfFOV) / Height, 0.0f, 0.0f),
106 TPlane<T>(0.0f, 0.0f, ((MinZ == MaxZ) ? (1.0f - Z_PRECISION) : MaxZ / (MaxZ - MinZ)), 1.0f),
107 TPlane<T>(0.0f, 0.0f, -MinZ * ((MinZ == MaxZ) ? (1.0f - Z_PRECISION) : MaxZ / (MaxZ - MinZ)), 0.0f)
108 )
109{ }
110
111
112template<typename T>
113inline TPerspectiveMatrix<T>::TPerspectiveMatrix(T HalfFOV, T Width, T Height, T MinZ)
114 : TMatrix<T>(
115 TPlane<T>(1.0f / FMath::Tan(HalfFOV), 0.0f, 0.0f, 0.0f),
116 TPlane<T>(0.0f, Width / FMath::Tan(HalfFOV) / Height, 0.0f, 0.0f),
117 TPlane<T>(0.0f, 0.0f, (1.0f - Z_PRECISION), 1.0f),
118 TPlane<T>(0.0f, 0.0f, -MinZ * (1.0f - Z_PRECISION), 0.0f)
119 )
120{ }
121
122
123template<typename T>
125 : TMatrix<T>(
126 TPlane<T>(MultFOVX / FMath::Tan(HalfFOVX), 0.0f, 0.0f, 0.0f),
127 TPlane<T>(0.0f, MultFOVY / FMath::Tan(HalfFOVY), 0.0f, 0.0f),
128 TPlane<T>(0.0f, 0.0f, ((MinZ == MaxZ) ? 0.0f : MinZ / (MinZ - MaxZ)), 1.0f),
129 TPlane<T>(0.0f, 0.0f, ((MinZ == MaxZ) ? MinZ : -MaxZ * MinZ / (MinZ - MaxZ)), 0.0f)
130 )
131{ }
132
133
134template<typename T>
136 : TMatrix<T>(
137 TPlane<T>(1.0f / FMath::Tan(HalfFOV), 0.0f, 0.0f, 0.0f),
138 TPlane<T>(0.0f, Width / FMath::Tan(HalfFOV) / Height, 0.0f, 0.0f),
139 TPlane<T>(0.0f, 0.0f, ((MinZ == MaxZ) ? 0.0f : MinZ / (MinZ - MaxZ)), 1.0f),
140 TPlane<T>(0.0f, 0.0f, ((MinZ == MaxZ) ? MinZ : -MaxZ * MinZ / (MinZ - MaxZ)), 0.0f)
141 )
142{ }
143
144
145template<typename T>
147 : TMatrix<T>(
148 TPlane<T>(1.0f / FMath::Tan(HalfFOV), 0.0f, 0.0f, 0.0f),
149 TPlane<T>(0.0f, Width / FMath::Tan(HalfFOV) / Height, 0.0f, 0.0f),
150 TPlane<T>(0.0f, 0.0f, 0.0f, 1.0f),
151 TPlane<T>(0.0f, 0.0f, MinZ, 0.0f)
152 )
153{ }
154
155#ifdef _MSC_VER
156#pragma warning (pop)
157#endif
158
159
160} // namespace Math
161} // namespace UE
162
165
166template<> struct TIsUECoreVariant<FPerspectiveMatrix44f> { enum { Value = true }; };
167template<> struct TIsUECoreVariant<FPerspectiveMatrix44d> { enum { Value = true }; };
168template<> struct TIsUECoreVariant<FReversedZPerspectiveMatrix44f> { enum { Value = true }; };
169template<> struct TIsUECoreVariant<FReversedZPerspectiveMatrix44d> { enum { Value = true }; };
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_DECLARE_LWC_TYPE(...)
Definition LargeWorldCoordinates.h:27
#define Z_PRECISION
Definition PerspectiveMatrix.h:20
Definition AdvancedWidgetsModule.cpp:13
Definition UnrealMathUtility.h:270
Definition IsUECoreType.h:19
@ Value
Definition IsUECoreType.h:20
Definition Matrix.h:43
Definition PerspectiveMatrix.h:16
TPerspectiveMatrix(T HalfFOVX, T HalfFOVY, T MultFOVX, T MultFOVY, T MinZ, T MaxZ)
Definition PerspectiveMatrix.h:91
TPerspectiveMatrix(const TPerspectiveMatrix< FArg > &From)
Definition PerspectiveMatrix.h:59
Definition Plane.h:35
Definition PerspectiveMatrix.h:68
TReversedZPerspectiveMatrix(const TReversedZPerspectiveMatrix< FArg > &From)
Definition PerspectiveMatrix.h:76
TReversedZPerspectiveMatrix(T HalfFOVX, T HalfFOVY, T MultFOVX, T MultFOVY, T MinZ, T MaxZ)
Definition PerspectiveMatrix.h:124