UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Bounds.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/Vector.h"
8#include "Math/Vector4.h"
9
10template< typename T >
11struct TBounds
12{
13 template< typename U > using TVector = UE::Math::TVector<U>;
14 template< typename U > using TVector4 = UE::Math::TVector4<U>;
15 template< typename U > using TMatrix = UE::Math::TMatrix<U>;
16 using FReal = T;
17
20
22 {
23 Min = Other;
24 Max = Other;
25 return *this;
26 }
27
34
41
43 {
44 return TBounds<T>(*this) += Other;
45 }
46
54
62
63 [[nodiscard]] inline T DistSqr( const TVector<T>& Point ) const
64 {
65 auto rMin = VectorLoadAligned( &Min );
66 auto rMax = VectorLoadAligned( &Max );
67 auto rPoint = VectorLoadFloat3( &Point );
70 }
71
73 {
74 return (Max + Min) * 0.5f;
75 }
76
78 {
79 return (Max - Min) * 0.5f;
80 }
81
83 {
84 return (Max - Min);
85 }
86
87 [[nodiscard]] inline T GetSurfaceArea() const
88 {
90 return 0.5f * (Size.X * Size.Y + Size.X * Size.Z + Size.Y * Size.Z);
91 }
92
93 template< typename U >
94 [[nodiscard]] inline auto ToAbsolute( const TVector<U>& Offset ) const
95 {
96 using CommonType = typename std::common_type<T, U>::type;
97
101 return Bounds;
102 }
103
104 template< typename U >
106 {
107 using CommonType = typename std::common_type<T, U>::type;
108
109 TBounds< float > Bounds;
112 return Bounds;
113 }
114
115 inline TBounds<T> TransformBy( const TMatrix<T>& M ) const
116 {
117 auto rMin = VectorLoadAligned( &Min );
118 auto rMax = VectorLoadAligned( &Max );
119
120 auto m0 = VectorLoadAligned( M.M[0] );
121 auto m1 = VectorLoadAligned( M.M[1] );
122 auto m2 = VectorLoadAligned( M.M[2] );
123 auto m3 = VectorLoadAligned( M.M[3] );
124
125 auto Half = VectorSetFloat1( (T)0.5f );
126 auto Origin = VectorMultiply( VectorAdd( rMax, rMin ), Half );
127 auto Extent = VectorMultiply( VectorSubtract( rMax, rMin ), Half );
128
129 auto NewOrigin = VectorMultiplyAdd( VectorReplicate( Origin, 0 ), m0, m3 );
130 NewOrigin = VectorMultiplyAdd( VectorReplicate( Origin, 1 ), m1, NewOrigin );
131 NewOrigin = VectorMultiplyAdd( VectorReplicate( Origin, 2 ), m2, NewOrigin );
132
133 auto NewExtent = VectorAbs( VectorMultiply( VectorReplicate( Extent, 0 ), m0 ) );
136
137 auto NewMin = VectorSubtract( NewOrigin, NewExtent );
138 auto NewMax = VectorAdd( NewOrigin, NewExtent );
139
140 TBounds<T> Bounds;
141 VectorStoreAligned( NewMin, &Bounds.Min );
142 VectorStoreAligned( NewMax, &Bounds.Max );
143 return Bounds;
144 }
145
146 inline friend FArchive& operator<<( FArchive& Ar, TBounds<T>& Bounds )
147 {
148 Ar << Bounds.Min;
149 Ar << Bounds.Max;
150 return Ar;
151 }
152};
153
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FORCEINLINE VectorRegister4Float VectorSubtract(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:731
FORCEINLINE VectorRegister4Double VectorLoadFloat3(const double *Ptr)
Definition UnrealMathFPU.h:427
FORCEINLINE VectorRegister4Float VectorMin(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1686
FORCEINLINE VectorRegister4Float VectorSetFloat1(float F)
Definition UnrealMathFPU.h:518
FORCEINLINE VectorRegister4Float VectorMultiply(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:758
FORCEINLINE VectorRegister4Float VectorMax(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1713
FORCEINLINE VectorRegister4Float VectorBitwiseAnd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1165
VectorRegister4Float VectorLoadAligned(const float *Ptr)
Definition UnrealMathFPU.h:451
FORCEINLINE VectorRegister4Float VectorMultiplyAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2, const VectorRegister4Float &Vec3)
Definition UnrealMathFPU.h:786
FORCEINLINE VectorRegister4Float VectorCompareGT(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:974
FORCEINLINE VectorRegister4Float VectorCompareGE(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1000
FORCEINLINE int32 VectorMaskBits(const VectorRegister4Float &Vec1)
Definition UnrealMathFPU.h:1075
FORCEINLINE VectorRegister4Float VectorAbs(const VectorRegister4Float &Vec)
Definition UnrealMathFPU.h:661
FORCEINLINE VectorRegister4Float VectorAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:704
FORCEINLINE float VectorDot3Scalar(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:861
void VectorStoreAligned(const VectorRegister4Float &Vec, float *Ptr)
Definition UnrealMathFPU.h:534
FORCEINLINE VectorRegister4Float VectorBitwiseOr(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1140
FORCEINLINE VectorRegister4Float VectorCompareLE(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1050
#define VectorReplicate(Vec, ElementIndex)
Definition UnrealMathFPU.h:627
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
Definition Archive.h:1208
Definition Bounds.h:12
UE_FORCEINLINE_HINT TBounds< T > operator+(const TBounds< T > &Other) const
Definition Bounds.h:42
TBounds< T > & operator+=(const TBounds< T > &Other)
Definition Bounds.h:35
TVector4< T > Max
Definition Bounds.h:19
TBounds< float > ToRelative(const TVector< U > &Offset) const
Definition Bounds.h:105
T DistSqr(const TVector< T > &Point) const
Definition Bounds.h:63
UE_FORCEINLINE_HINT TVector< T > GetExtent() const
Definition Bounds.h:77
TVector4< T > Min
Definition Bounds.h:18
UE_FORCEINLINE_HINT TVector< T > GetSize() const
Definition Bounds.h:82
T GetSurfaceArea() const
Definition Bounds.h:87
bool Contains(const TBounds< T > &Other) const
Definition Bounds.h:55
UE_FORCEINLINE_HINT TVector< T > GetCenter() const
Definition Bounds.h:72
T FReal
Definition Bounds.h:16
bool Intersect(const TBounds< T > &Other) const
Definition Bounds.h:47
friend FArchive & operator<<(FArchive &Ar, TBounds< T > &Bounds)
Definition Bounds.h:146
TBounds< T > & operator=(const TVector< T > &Other)
Definition Bounds.h:21
TBounds< T > & operator+=(const TVector< T > &Other)
Definition Bounds.h:28
TBounds< T > TransformBy(const TMatrix< T > &M) const
Definition Bounds.h:115
auto ToAbsolute(const TVector< U > &Offset) const
Definition Bounds.h:94
Definition NumericLimits.h:41
Definition Matrix.h:43
T M[4][4]
Definition Matrix.h:49
Definition Vector4.h:30
Definition Vector.h:51