21 template<
class T,
int d>
164 return AABB.PhiWithNormal(Pos,
Normal);
172 static FORCEINLINE bool RaycastFast(
const TVector<T,d>&
InMin,
const TVector<T,d>&
InMax,
const TVector<T, d>& StartPoint,
const TVector<T, d>& Dir,
const TVector<T, d>& InvDir,
const bool* bParallel,
const T
Length,
const T
InvLength, T& OutTime,
TVector<T, d>& OutPosition)
179 if (AABB.Raycast(StartPoint, Dir,
Length, Thickness, OutTime, OutPosition, OutNormal, OutFaceIndex))
188 return AABB.FindClosestPoint(StartPoint, Thickness);
193 return AABB.FindClosestIntersectionImp(StartPoint, EndPoint, Thickness);
206 if (
Normal[AxisIndex] < 0.0f)
294 VertexIndex0 = VertexIndex1;
361 OutX = AABB.Center() + 0.5f * (SNormals[
FaceIndex] * AABB.Extents());
368 return AABB.Center() + 0.5f * (
Vertex * AABB.Extents());
374 return AABB.Support(Direction, Thickness, VertexIndex);
420 return AABB.LargestAxis();
433 const T M =
Mass / 12;
434 const T
WW = Dim[0] * Dim[0];
435 const T
HH = Dim[1] * Dim[1];
436 const T
DD = Dim[2] * Dim[2];
483 template<
typename OtherType>
497 else if (std::is_same_v<T, OtherType>)
526 template <
typename Key>
535 for (
const auto&
Itr : Tmp)
556 return AABB.GetTypeHash();
#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
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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
virtual void Serialize(FChaosArchive &Ar) override
Definition Box.h:595
FBoxFloat3()
Definition Box.h:573
FORCEINLINE void SerializeImp(FArchive &Ar)
Definition Box.h:583
virtual FReal PhiWithNormal(const FVec3 &x, FVec3 &Normal) const override
Definition Box.h:577
virtual uint32 GetTypeHash() const override
Definition Box.h:603
virtual void Serialize(FArchive &Ar) override
Definition Box.h:601
Definition ChaosArchive.h:364
Definition ChaosArchive.h:167
Definition ImplicitObject.h:111
bool bHasBoundingBox
Definition ImplicitObject.h:574
CHAOS_API FReal SignedDistance(const FVec3 &x) const
Definition ImplicitObject.cpp:105
FRealSingle Margin
Definition ImplicitObject.h:571
EImplicitObjectType Type
Definition ImplicitObject.h:585
bool bDoCollide
Definition ImplicitObject.h:573
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
CHAOS_API void SerializeImp(FArchive &Ar)
Definition ImplicitObject.cpp:337
void SetMargin(FReal InMargin)
Definition ImplicitObject.h:567
bool bIsConvex
Definition ImplicitObject.h:572
virtual FRealSingle GetMarginf() const
Definition ImplicitObject.h:212
FORCEINLINE TArray< TVector< T, d > > ComputeLocalSamplePoints() const
Definition AABB.h:90
FORCEINLINE T GetArea() const
Definition AABB.h:610
FORCEINLINE TArray< TVector< T, d > > ComputeSamplePoints() const
Definition AABB.h:99
FORCEINLINE T GetVolume() const
Definition AABB.h:613
FORCEINLINE void Serialize(FArchive &Ar)
Definition AABB.h:660
static FORCEINLINE TRotation< FReal, d > GetRotationOfMass()
Definition AABB.h:686
FORCEINLINE bool Contains(const TVector< T, d > &Point) const
Definition AABB.h:127
virtual ~TBox()
Definition Box.h:92
virtual void Serialize(FArchive &Ar) override
Definition Box.h:552
static FORCEINLINE PMatrix< T, 3, 3 > GetInertiaTensor(const T Mass, const TVector< T, 3 > &Dim)
Definition Box.h:430
virtual Pair< FVec3, bool > FindClosestIntersectionImp(const FVec3 &StartPoint, const FVec3 &EndPoint, const FReal Thickness) const override
Definition Box.h:191
int32 GetVertexPlanes3(int32 VertexIndex, int32 &PlaneIndex0, int32 &PlaneIndex1, int32 &PlaneIndex2) const
Definition Box.h:317
FORCEINLINE void SerializeImp(FArchive &Ar)
Definition Box.h:451
int32 GetEdgeVertex(int32 EdgeIndex, int32 EdgeVertexIndex) const
Definition Box.h:334
FORCEINLINE TBox(const TBox< T, d > &Other)
Definition Box.h:54
FORCEINLINE TBox< T, d > & operator=(const TBox< T, d > &Other)
Definition Box.h:68
FORCEINLINE bool Contains(const TVector< T, d > &Point, const T Tolerance) const
Definition Box.h:130
int32 GetMostOpposingPlane(const TVector< T, d > &Normal) const
Definition Box.h:202
static void SerializeAsAABBs(FArchive &Ar, TMap< Key, TAABB< T, d > > &AABBs)
Definition Box.h:527
int32 GetMostOpposingPlaneScaled(const TVector< T, d > &Normal, const TVector< T, d > &Scale) const
Definition Box.h:213
FORCEINLINE PMatrix< T, d, d > GetInertiaTensor(const T Mass) const
Definition Box.h:429
static FORCEINLINE bool RaycastFast(const TVector< T, d > &InMin, const TVector< T, d > &InMax, const TVector< T, d > &StartPoint, const TVector< T, d > &Dir, const TVector< T, d > &InvDir, const bool *bParallel, const T Length, const T InvLength, T &OutTime, TVector< T, d > &OutPosition)
Definition Box.h:172
static FORCEINLINE constexpr EImplicitObjectType StaticType()
Definition Box.h:28
int32 GetPlaneVertex(int32 PlaneIndex, int32 PlaneVertexIndex) const
Definition Box.h:329
FORCEINLINE_DEBUGGABLE VectorRegister4Float SupportCoreSimd(const VectorRegister4Float &Direction, const FReal InMargin) const
Definition Box.h:384
TArray< TVector< T, d > > ComputeLocalSamplePoints() const
Definition Box.h:112
FORCEINLINE_DEBUGGABLE TVector< T, d > SupportCore(const TVector< T, d > &Direction, const FReal InMargin, FReal *OutSupportDelta, int32 &VertexIndex) const
Definition Box.h:378
TVector< T, d > GetClosestEdgePosition(int32 PlaneIndexHint, const TVector< T, d > &Position) const
Definition Box.h:261
FORCEINLINE FReal GetWindingOrder() const
Definition Box.h:408
FORCEINLINE TVector< T, d > GetCenterOfMass() const
Definition Box.h:415
virtual FReal PhiWithNormal(const FVec3 &Pos, FVec3 &Normal) const override
Definition Box.h:162
void GetPlaneNX(const int32 FaceIndex, FVec3 &OutN, FVec3 &OutX) const
Definition Box.h:358
FORCEINLINE TBox(const TVector< T, d > &Min, const TVector< T, d > &Max)
Definition Box.h:33
int32 GetEdgePlane(int32 EdgeIndex, int32 EdgePlaneIndex) const
Definition Box.h:339
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
static void SerializeAsAABB(FArchive &Ar, TAABB< T, d > &AABB)
Definition Box.h:467
virtual FVec3 FindGeometryOpposingNormal(const FVec3 &DenormDir, int32 FaceIndex, const FVec3 &OriginalNormal) const override
Definition Box.h:196
FORCEINLINE const TAABB< FReal, 3 > BoundingBox() const
Definition Box.h:148
FORCEINLINE TBox()
Definition Box.h:31
int32 NumPlanes() const
Definition Box.h:344
virtual Chaos::FImplicitObjectPtr CopyGeometry() const override
Definition Box.h:94
FORCEINLINE const TVector< T, d > & Max() const
Definition Box.h:142
TVector< T, d > FindClosestPoint(const TVector< T, d > &StartPoint, const T Thickness=(T) 0) const
Definition Box.h:186
FVec3 GetClosestEdge(int32 PlaneIndexHint, const FVec3 &Position, FVec3 &OutEdgePos0, FVec3 &OutEdgePos1) const
Definition Box.h:221
FORCEINLINE TVector< T, d > Center() const
Definition Box.h:413
FORCEINLINE TBox(TBox< T, d > &&Other)
Definition Box.h:61
FORCEINLINE bool Contains(const TVector< T, d > &Point) const
Definition Box.h:125
static void SerializeAsAABBs(FArchive &Ar, TArray< TAABB< OtherType, d > > &AABBs)
Definition Box.h:484
const FVec3 GetVertex(int32 VertexIndex) const
Definition Box.h:365
virtual bool Raycast(const FVec3 &StartPoint, const FVec3 &Dir, const FReal Length, const FReal Thickness, FReal &OutTime, FVec3 &OutPosition, FVec3 &OutNormal, int32 &OutFaceIndex) const override
Definition Box.h:177
virtual FReal GetRadius() const override
Definition Box.h:104
int32 NumVertices() const
Definition Box.h:348
int32 FindVertexPlanes(int32 VertexIndex, int32 *OutVertexPlanes, int32 MaxVertexPlanes) const
Definition Box.h:310
FORCEINLINE TBox< T, d > & operator=(TBox< T, d > &&Other)
Definition Box.h:80
int32 NumEdges() const
Definition Box.h:346
static FORCEINLINE TRotation< T, d > GetRotationOfMass()
Definition Box.h:441
TArray< TVector< T, d > > ComputeSamplePoints() const
Definition Box.h:120
FORCEINLINE const TVector< T, d > & Min() const
Definition Box.h:136
int LargestAxis() const
Definition Box.h:418
const TPlaneConcrete< FReal > GetPlane(int32 FaceIndex) const
Definition Box.h:351
bool GetClosestEdgeVertices(int32 PlaneIndexHint, const FVec3 &Position, int32 &OutVertexIndex0, int32 &OutVertexIndex1) const
Definition Box.h:267
virtual uint32 GetTypeHash() const override
Definition Box.h:554
FORCEINLINE TBox(const TVector< T, d > &InMin, const TVector< T, d > &InMax, FReal InMargin)
Definition Box.h:47
virtual FString ToString() const override
Definition Box.h:446
FORCEINLINE TVector< T, d > GetCenter() const
Definition Box.h:414
FORCEINLINE_DEBUGGABLE TVector< T, d > Support(const TVector< T, d > &Direction, const T Thickness, int32 &VertexIndex) const
Definition Box.h:372
FORCEINLINE T GetVolume() const
Definition Box.h:427
int32 NumPlaneVertices(int32 PlaneIndex) const
Definition Box.h:323
FORCEINLINE T GetArea() const
Definition Box.h:424
FORCEINLINE TVector< T, d > Extents() const
Definition Box.h:416
FORCEINLINE FReal ClampedMargin(FReal InMargin) const
Definition Box.h:155
FORCEINLINE_DEBUGGABLE TVector< T, d > SupportCoreScaled(const TVector< T, d > &Direction, const FReal InMargin, const TVector< T, d > &Scale, T *OutSupportDelta, int32 &VertexIndex) const
Definition Box.h:393
virtual Chaos::FImplicitObjectPtr CopyGeometryWithScale(const FVec3 &Scale) const override
Definition Box.h:99
virtual FReal PhiWithNormalScaled(const FVec3 &Pos, const FVec3 &Scale, FVec3 &Normal) const override
Definition Box.h:167
virtual void Serialize(FChaosArchive &Ar) override
Definition Box.h:546
Definition ConvexHalfEdgeStructureData.h:38
int32 GetVertexPlanes3(int32 VertexIndex, int32 &PlaneIndex0, int32 &PlaneIndex1, int32 &PlaneIndex2) const
Definition ConvexHalfEdgeStructureData.h:326
int32 GetPlaneVertex(int32 PlaneIndex, int32 PlaneVertexIndex) const
Definition ConvexHalfEdgeStructureData.h:173
int32 GetEdgePlane(int32 EdgeIndex, int32 EdgePlaneIndex) const
Definition ConvexHalfEdgeStructureData.h:242
int32 NumEdges() const
Definition ConvexHalfEdgeStructureData.h:135
int32 GetEdgeVertex(int32 EdgeIndex, int32 EdgeVertexIndex) const
Definition ConvexHalfEdgeStructureData.h:226
int32 NumPlaneVertices(int32 PlaneIndex) const
Definition ConvexHalfEdgeStructureData.h:164
int32 FindVertexPlanes(int32 VertexIndex, int32 *PlaneIndices, int32 MaxVertexPlanes) const
Definition ConvexHalfEdgeStructureData.h:309
Definition CorePlane.h:12
Definition Archive.h:1208
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
virtual CORE_API void Reset()
Definition Archive.cpp:151
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UnrealString.h.inl:34
@ Box
Definition ImplicitObjectType.h:14
Definition SkeletalMeshComponent.h:307
TRefCountPtr< FImplicitObject > FImplicitObjectPtr
Definition ImplicitFwd.h:33
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
FRealDouble FReal
Definition Real.h:22
float FRealSingle
Definition Real.h:14
FORCEINLINE uint32 GetTypeHash(const FParticleID &Unique)
Definition GeometryParticles.h:99
TVector< FReal, 3 > FVec3
Definition Core.h:17
CORE_API static const FGuid GUID
Definition ExternalPhysicsCustomObjectVersion.h:144
@ TBoxReplacedWithTAABB
Definition ExternalPhysicsCustomObjectVersion.h:88
static CORE_API UE::Math::TVector< T > ClosestPointOnLine(const UE::Math::TVector< T > &LineStart, const UE::Math::TVector< T > &LineEnd, const UE::Math::TVector< T > &Point)
CORE_API static const FGuid GUID
Definition ReleaseObjectVersion.h:154
@ MarginAddedToConvexAndBox
Definition ReleaseObjectVersion.h:125
Definition UnrealMathFPU.h:20