10 template<
class T,
int d>
13 template<
typename T,
int d>
35 template<
class T,
int d>
40 static constexpr int D = d;
60 template<
typename OtherType>
111 template <
typename TReal>
114 for (
int32 i = 0; i < d; ++i)
116 if (
Other.Max()[i] < MMin[i] ||
Other.Min()[i] > MMax[i])
129 for (
int i = 0; i < d; i++)
141 for (
int i = 0; i < d; i++)
143 if (
Point[i] < MMin[i] - Tolerance ||
Point[i] > MMax[i] + Tolerance)
176 return MaxAndAxis.
First;
180 for (
int i = 0; i < d; ++i)
198 for (
int i = 0; i < d; ++i)
215 CHAOSCORE_API bool Raycast(
const TVector<FReal, d>& StartPoint,
const TVector<FReal, d>& Dir,
const FReal Length,
const FReal Thickness,
FReal& OutTime,
TVector<FReal, d>& OutPosition,
TVector<FReal, d>& OutNormal,
int32& OutFaceIndex)
const;
222 FORCEINLINE bool RaycastFast(
const TVector<FReal, d>& StartPoint,
const TVector<FReal, d>& Dir,
const TVector<FReal, d>& InvDir,
const bool* bParallel,
const FReal Length,
const FReal InvLength,
FReal&
OutEntryTime,
FReal&
OutExitTime)
const
227 FORCEINLINE bool RaycastFast(
const TVector<FReal, d>& StartPoint,
const TVector<FReal, d>& Dir,
const TVector<FReal, d>& InvDir,
const bool* bParallel,
const FReal Length,
FReal& OutTime,
TVector<FReal, d>& OutPosition)
const
240 FORCEINLINE bool RaycastFast(
const TVector<FReal, d>& StartPoint,
const TVector<FReal, d>& Dir,
const TVector<FReal, d>& InvDir,
const bool* bParallel,
const FReal Length,
const FReal InvLength,
FReal& OutTime,
TVector<FReal, d>& OutPosition)
const
242 return RaycastFast(StartPoint, Dir, InvDir, bParallel,
Length, OutTime, OutPosition);
289 if(Direction[
Axis] < 0)
303 if (Thickness != (T)0)
307 T
SizeSqr = Direction.SizeSquared();
328 if(Direction[
Axis] < 0)
481 (
Index & (1 << 0)) == 0 ? MMin.X : MMax.X,
482 (
Index & (1 << 1)) == 0 ? MMin.Y : MMax.Y,
483 (
Index & (1 << 2)) == 0 ? MMin.Z : MMax.Z);
524 { 0, 1 }, { 0, 2 }, { 0, 4 },
525 { 1, 3 }, { 1, 5 }, { 2, 3 },
526 { 2, 6 }, { 3, 7 }, { 4, 5 },
527 { 4, 6 }, { 5, 7 }, { 6, 7 }
538 {{ 0, 1, 5, 4 }, {0, 4, 8, 2}},
539 {{ 1, 3, 7, 5 }, {3, 7, 10, 4}},
540 {{ 4, 5, 7, 6 }, {8, 10, 11, 9}},
541 {{ 0, 2, 3, 1 }, {1, 5, 3, 0}},
542 {{ 0, 4, 6, 2 }, {2, 9, 6, 1}},
543 {{ 2, 6, 7, 3 }, {6, 11, 7, 5}}
607 return (T(0.5) *
Extents()).Size();
672 return FString::Printf(
TEXT(
"AABB: Min: [%s], Max: [%s]"), *MMin.ToString(), *MMax.ToString());
680 const FReal WW = Dim[0] * Dim[0];
681 const FReal HH = Dim[1] * Dim[1];
682 const FReal DD = Dim[2] * Dim[2];
698 template<
typename... Points>
701 static_assert(
sizeof...(InPoints) > 0);
702 static_assert(std::is_same_v<std::common_type_t<Points...>,
TVector<T, d>>);
705 (Result.GrowToInclude(
InPoints), ...);
713 template<
class T,
int d>
809 using FAABB3 = TAABB<FReal, 3>;
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define FVector
Definition IOSSystemIncludes.h:8
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
FORCEINLINE VectorRegister4Float MakeVectorRegister(uint32 X, uint32 Y, uint32 Z, uint32 W)
Definition UnrealMathFPU.h:195
FORCEINLINE void VectorStoreFloat3(const VectorRegister4Float &Vec, float *Dst)
Definition UnrealMathFPU.h:594
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatFromDouble(const VectorRegister4Double &Vec4d)
Definition UnrealMathFPU.h:262
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FORCEINLINE TArray< TVector< T, d > > ComputeLocalSamplePoints() const
Definition AABB.h:90
FORCEINLINE bool Contains(const TAABB< T, d > &Other) const
Definition AABB.h:151
static TAABB< T, d > FromPoints(const TVector< T, d > &P0, const Points &... InPoints)
Definition AABB.h:699
FORCEINLINE FRealSingle GetMarginf() const
Definition AABB.h:618
FORCEINLINE bool RaycastFast(const TVector< FReal, d > &StartPoint, const TVector< FReal, d > &Dir, const TVector< FReal, d > &InvDir, const bool *bParallel, const FReal Length, const FReal InvLength, FReal &OutEntryTime, FReal &OutExitTime) const
Definition AABB.h:222
FORCEINLINE TAABB()
Definition AABB.h:42
FORCEINLINE FAABBFace GetFace(const int32 Index) const
Definition AABB.h:532
FORCEINLINE TAABB< T, d > & GrowByVector(const TVector< T, d > &V)
Definition AABB.h:436
FORCEINLINE_DEBUGGABLE TVector< T, d > Support(const TVector< T, d > &Direction, const T Thickness, int32 &OutVertexIndex) const
Definition AABB.h:283
FORCEINLINE FReal SignedDistance(const TVector< FReal, d > &x) const
Definition AABB.h:160
FORCEINLINE TVector< T, d > GetVertex(const int32 Index) const
Definition AABB.h:475
FORCEINLINE T GetArea() const
Definition AABB.h:610
static FORCEINLINE PMatrix< FReal, 3, 3 > GetInertiaTensor(const FReal Mass, const TVector< FReal, 3 > &Dim)
Definition AABB.h:676
FORCEINLINE bool Contains(const TVector< T, d > &Point, const T Tolerance) const
Definition AABB.h:139
FORCEINLINE TArray< TVector< T, d > > ComputeSamplePoints() const
Definition AABB.h:99
FORCEINLINE const TVector< T, d > & Max() const
Definition AABB.h:596
FORCEINLINE PMatrix< FReal, d, d > GetInertiaTensor(const FReal Mass) const
Definition AABB.h:675
FORCEINLINE constexpr bool IsConvex() const
Definition AABB.h:691
FORCEINLINE T GetMargin() const
Definition AABB.h:616
FORCEINLINE T GetVolume() const
Definition AABB.h:613
FORCEINLINE bool Intersects(const TAABB< TReal, d > &Other) const
Definition AABB.h:112
FORCEINLINE FAABBEdge GetEdge(const int32 Index) const
Definition AABB.h:518
FORCEINLINE TAABB< T, d > & Scale(const TVector< T, d > &InScale)
Definition AABB.h:575
CHAOSCORE_API TVector< T, d > FindClosestPoint(const TVector< T, d > &StartPoint, const T Thickness=(T) 0) const
Definition AABB.cpp:39
FORCEINLINE TVector< T, d > FindGeometryOpposingNormal(const TVector< T, d > &DenormDir, int32 FaceIndex, const TVector< T, d > &OriginalNormal) const
Definition AABB.h:249
FORCEINLINE TAABB(TAABB< T, d > &&Other)
Definition AABB.h:67
FORCEINLINE TAABB< T, d > & ThickenSymmetrically(const TVector< T, d > &Thickness)
Definition AABB.h:419
FORCEINLINE bool RaycastFast(const TVector< FReal, d > &StartPoint, const TVector< FReal, d > &Dir, const TVector< FReal, d > &InvDir, const bool *bParallel, const FReal Length, FReal &OutEntryTime, FReal &OutExitTime) const
Definition AABB.h:217
FString ToString() const
Definition AABB.h:670
FORCEINLINE bool IsFull() const
Definition AABB.h:636
FORCEINLINE T GetRadius() const
Definition AABB.h:617
FORCEINLINE FReal PhiWithNormal(const TVector< FReal, d > &X, TVector< FReal, d > &Normal) const
Definition AABB.h:166
static constexpr int D
Definition AABB.h:40
FORCEINLINE void Serialize(FArchive &Ar)
Definition AABB.h:660
FORCEINLINE void ShrinkToInclude(const TAABB< T, d > &Other)
Definition AABB.h:405
FORCEINLINE bool IsEmpty() const
Definition AABB.h:644
static FORCEINLINE T GetArea(const TVector< T, d > &Dim)
Definition AABB.h:611
static FORCEINLINE TRotation< FReal, d > GetRotationOfMass()
Definition AABB.h:686
FORCEINLINE const TAABB< T, d > & BoundingBox() const
Definition AABB.h:156
FORCEINLINE TVector< T, d > Center() const
Definition AABB.h:450
FORCEINLINE T CenterRadius() const
Definition AABB.h:605
FORCEINLINE TVector< T, d > GetCenterOfMass() const
Definition AABB.h:452
FORCEINLINE TAABB< T, d > & LocalScale(const TVector< T, d > &InScale)
Definition AABB.h:586
FORCEINLINE TAABB< T, d > & ShrinkSymmetrically(const TVector< T, d > &Thickness)
Definition AABB.h:427
FORCEINLINE TAABB< T, d > & ScaleWithNegative(const TVector< T, d > &InScale)
Definition AABB.h:565
FORCEINLINE TAABB< T, d > & Thicken(const T Thickness)
Definition AABB.h:411
FORCEINLINE bool RaycastFast(const TVector< FReal, d > &StartPoint, const TVector< FReal, d > &Dir, const TVector< FReal, d > &InvDir, const bool *bParallel, const FReal Length, FReal &OutTime, TVector< FReal, d > &OutPosition) const
Definition AABB.h:227
FORCEINLINE void GrowToInclude(const TVector< T, d > &V)
Definition AABB.h:393
FORCEINLINE_DEBUGGABLE TVector< T, d > SupportCoreScaled(const TVector< T, d > &Direction, const T InMargin, const TVector< T, d > &Scale, T *OutSupportDelta, int32 &OutVertexIndex) const
Definition AABB.h:361
FORCEINLINE FRealSingle GetRadiusf() const
Definition AABB.h:619
FORCEINLINE_DEBUGGABLE VectorRegister4Float SupportCoreSimd(const VectorRegister4Float &Direction, const FReal InMargin) const
Definition AABB.h:352
CHAOSCORE_API TAABB< T, d > InverseTransformedAABB(const Chaos::FRigidTransform3 &) const
Definition AABB.cpp:412
static FORCEINLINE T GetVolume(const TVector< T, 3 > &Dim)
Definition AABB.h:614
TAABB(const TAABB< OtherType, d > &Other)
Definition AABB.h:61
CHAOSCORE_API Pair< TVector< FReal, d >, bool > FindClosestIntersectionImp(const TVector< FReal, d > &StartPoint, const TVector< FReal, d > &EndPoint, const FReal Thickness) const
Definition AABB.cpp:89
FORCEINLINE_DEBUGGABLE FVec3 SupportCore(const FVec3 &Direction, const FReal InMargin, FReal *OutSupportDelta, int32 &OutVertexIndex) const
Definition AABB.h:322
FORCEINLINE TVector< T, d > Extents() const
Definition AABB.h:453
static FORCEINLINE TAABB< T, d > ZeroAABB()
Definition AABB.h:630
FORCEINLINE void GrowToInclude(const TAABB< T, d > &Other)
Definition AABB.h:399
FORCEINLINE int LargestAxis() const
Definition AABB.h:548
FORCEINLINE uint16 GetMaterialIndex(uint32 HintIndex) const
Definition AABB.h:158
CHAOSCORE_API TAABB< T, d > TransformedAABB(const FTransform &) const
Definition AABB.cpp:385
static FORCEINLINE TAABB< T, d > FullAABB()
Definition AABB.h:627
FORCEINLINE TAABB(const TVector< T, d > &Min, const TVector< T, d > &Max)
Definition AABB.h:48
T TType
Definition AABB.h:39
FORCEINLINE T OriginRadius() const
Definition AABB.h:599
FORCEINLINE bool RaycastFast(const TVector< FReal, d > &StartPoint, const TVector< FReal, d > &Dir, const TVector< FReal, d > &InvDir, const bool *bParallel, const FReal Length, const FReal InvLength, FReal &OutTime, TVector< FReal, d > &OutPosition) const
Definition AABB.h:240
FORCEINLINE TAABB< T, d > & operator=(TAABB< T, d > &&Other)
Definition AABB.h:80
FORCEINLINE void MoveByVector(TVector< T, d > InVector)
Definition AABB.h:444
FORCEINLINE uint32 GetTypeHash() const
Definition AABB.h:665
FORCEINLINE bool Contains(const TVector< T, d > &Point) const
Definition AABB.h:127
FORCEINLINE void Clear()
Definition AABB.h:650
FORCEINLINE TAABB< T, d > & operator=(const TAABB< T, d > &Other)
Definition AABB.h:73
FORCEINLINE TAABB< T, d > GetIntersection(const TAABB< T, d > &Other) const
Definition AABB.h:122
static FORCEINLINE TAABB< T, d > EmptyAABB()
Definition AABB.h:623
FORCEINLINE const TVector< T, d > & Min() const
Definition AABB.h:595
FORCEINLINE TVector< T, d > GetCenter() const
Definition AABB.h:451
FORCEINLINE TAABB(const TAABB< T, d > &Other)
Definition AABB.h:54
FORCEINLINE int32 GetIndex(const FIntVector &AxisSelector) const
Definition AABB.h:492
Definition Archive.h:1208
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
bool RayAabb(const TVector< FReal, d > &RayStart, const TVector< FReal, d > &RayDir, const FReal RayLength, const FReal RayThickness, const TVector< T, d > &AabbMin, const TVector< T, d > &AabbMax, FReal &OutTime, TVector< FReal, d > &OutPosition, TVector< FReal, d > &OutNormal, int32 &OutFaceIndex)
Definition Raycasts.cpp:12
Definition SkeletalMeshComponent.h:307
@ X
Definition SimulationModuleBase.h:152
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
float FRealSingle
Definition Real.h:14
@ Raycast
Definition SimulationModuleBase.h:145
TAABB< FReal, 3 > FAABB3
Definition ImplicitObject.h:34
uint32 GetTypeHash(const TBox< T > &Box)
Definition Box.h:1008
U16 Index
Definition radfft.cpp:71
int8 VertexIndex0
Definition AABB.h:25
int8 VertexIndex1
Definition AABB.h:26
int8 EdgeIndex[4]
Definition AABB.h:32
int8 VertexIndex[4]
Definition AABB.h:31
T1 First
Definition Pair.h:14
T2 Second
Definition Pair.h:15
static FORCEINLINE TArray< TVector< T, 2 > > ComputeSamplePoints(const TAABB< T, 2 > &AABB)
Definition AABB.h:723
static FORCEINLINE TArray< TVector< T, 3 > > ComputeSamplePoints(const TAABB< T, 3 > &AABB)
Definition AABB.h:752
static FORCEINLINE TArray< TVector< T, d > > ComputeLocalSamplePoints(const class TAABB< T, d > &AABB)
Definition AABB.h:16
Definition NumericLimits.h:41
Definition UnrealMathFPU.h:20