UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshCardRepresentation.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 MeshCardRepresentation.h
5=============================================================================*/
6
7#pragma once
8
9#include "HAL/Platform.h"
10#include "Math/Box.h"
11#include "Math/Matrix.h"
12#include "Math/Vector.h"
13
15
21
23{
24 // Generation config
27
28 // Debugging
31
32 // Util
33 ENGINE_API FVector3f GetAxisAlignedDirection(uint32 AxisAlignedDirectionIndex);
35};
36
37template<typename T>
39{
40public:
46
48 TLumenCardOBB() = default;
49
56 {
57 Reset();
58 }
59
60 // Conversion from other type.
61 template<typename FArg UE_REQUIRES(!std::is_same_v<T, FArg>)>
70
79
81 {
82 return AxisZ;
83 }
84
92
97
102
108
113
119
121 {
122 TLumenCardOBB<T> WorldOBB;
123 WorldOBB.Origin = LocalToWorld.TransformPosition(Origin);
124
128 const T XAxisLength = ScaledXAxis.Size();
129 const T YAxisLength = ScaledYAxis.Size();
130 const T ZAxisLength = ScaledZAxis.Size();
131
132 // #lumen_todo: fix axisX flip cascading into entire card code
133 WorldOBB.AxisY = ScaledYAxis / FMath::Max(YAxisLength, UE_DELTA);
134 WorldOBB.AxisZ = ScaledZAxis / FMath::Max(ZAxisLength, UE_DELTA);
135 WorldOBB.AxisX = UE::Math::TVector<T>::CrossProduct(WorldOBB.AxisZ, WorldOBB.AxisY);
137
139 {
141 }
142
144 WorldOBB.Extent.Z = FMath::Max(WorldOBB.Extent.Z, 1.0f);
145
146 return WorldOBB;
147 }
148
150 {
151 UE::Math::TVector<T> BoxMin(AxisX.GetAbs() * -Extent.X + AxisY.GetAbs() * -Extent.Y + AxisZ.GetAbs() * -Extent.Z + Origin);
152 UE::Math::TVector<T> BoxMax(AxisX.GetAbs() * +Extent.X + AxisY.GetAbs() * +Extent.Y + AxisZ.GetAbs() * +Extent.Z + Origin);
153 return UE::Math::TBox<T>(BoxMin, BoxMax);
154 }
155
156 bool ContainsNaN() const
157 {
158 return Origin.ContainsNaN() || AxisX.ContainsNaN() || AxisY.ContainsNaN() || AxisZ.ContainsNaN() || Extent.ContainsNaN();
159 }
160
162 {
163 Ar << Data.AxisX;
164 Ar << Data.AxisY;
165 Ar << Data.AxisZ;
166 Ar << Data.Origin;
167 Ar << Data.Extent;
168 return Ar;
169 }
170};
171
EForceInit
Definition CoreMiscDefines.h:154
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ELumenCardDilationMode
Definition MeshCardRepresentation.h:17
#define UE_DELTA
Definition UnrealMathUtility.h:186
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition MeshCardBuild.h:94
Definition MeshCardRepresentation.h:39
UE::Math::TVector< T > Origin
Definition MeshCardRepresentation.h:41
UE::Math::TVector< T > AxisY
Definition MeshCardRepresentation.h:43
UE::Math::TVector< T > GetDirection() const
Definition MeshCardRepresentation.h:80
UE::Math::TVector< T > TransformLocalToCard(UE::Math::TVector< T > LocalPosition) const
Definition MeshCardRepresentation.h:103
UE::Math::TVector< T > RotateCardToLocal(UE::Math::TVector< T > Vector3) const
Definition MeshCardRepresentation.h:93
UE::Math::TVector< T > AxisX
Definition MeshCardRepresentation.h:42
bool ContainsNaN() const
Definition MeshCardRepresentation.h:156
UE::Math::TVector< T > Extent
Definition MeshCardRepresentation.h:45
TLumenCardOBB(EForceInit)
Definition MeshCardRepresentation.h:55
UE::Math::TVector< T > TransformCardToLocal(UE::Math::TVector< T > CardPosition) const
Definition MeshCardRepresentation.h:109
TLumenCardOBB()=default
void Reset()
Definition MeshCardRepresentation.h:71
UE::Math::TMatrix< T > GetCardToLocal() const
Definition MeshCardRepresentation.h:85
UE::Math::TVector< T > AxisZ
Definition MeshCardRepresentation.h:44
TLumenCardOBB< T > Transform(UE::Math::TMatrix< T > LocalToWorld, bool *bAxisXFlippedPtr=nullptr) const
Definition MeshCardRepresentation.h:120
TLumenCardOBB(const TLumenCardOBB< FArg > &From)
Definition MeshCardRepresentation.h:62
friend FArchive & operator<<(FArchive &Ar, TLumenCardOBB< T > &Data)
Definition MeshCardRepresentation.h:161
T ComputeSquaredDistanceToPoint(UE::Math::TVector< T > WorldPosition) const
Definition MeshCardRepresentation.h:114
UE::Math::TVector< T > RotateLocalToCard(UE::Math::TVector< T > Vector3) const
Definition MeshCardRepresentation.h:98
UE::Math::TBox< T > GetBox() const
Definition MeshCardRepresentation.h:149
Definition MeshCardRepresentation.h:23
ENGINE_API bool IsDebugMode()
Definition MeshCardRepresentation.cpp:104
ENGINE_API void SetCardsFromBounds(FMeshCardsBuildData &CardData, ELumenCardDilationMode DilationMode=ELumenCardDilationMode::Disabled, bool bCardCoversHalfBounds=false)
Definition MeshCardRepresentation.cpp:127
ENGINE_API FVector3f GetAxisAlignedDirection(uint32 AxisAlignedDirectionIndex)
Definition MeshCardRepresentation.cpp:118
ENGINE_API float GetNormalTreshold()
Definition MeshCardRepresentation.cpp:99
ENGINE_API float GetMinDensity()
Definition MeshCardRepresentation.cpp:94
ENGINE_API int32 GetDebugSurfelDirection()
Definition MeshCardRepresentation.cpp:113
Definition Box.h:35
Definition Matrix.h:43
TVector4< T > TransformPosition(const TVector< T > &V) const
Definition Matrix.inl:184
TVector4< T > TransformVector(const TVector< T > &V) const
Definition Matrix.inl:204
void SetIdentity()
Definition Matrix.inl:48
static UE_FORCEINLINE_HINT T DotProduct(const TVector< T > &A, const TVector< T > &B)
Definition Vector.h:1559
static UE_FORCEINLINE_HINT TVector< T > CrossProduct(const TVector< T > &A, const TVector< T > &B)
Definition Vector.h:1541
static void CreateOrthonormalBasis(TVector< T > &XAxis, TVector< T > &YAxis, TVector< T > &ZAxis)
Definition Vector.h:2247