26 class FMeshContactGenerator;
34 template <
typename QueryGeomType>
35 struct FTriangleMeshOverlapVisitorNoMTD;
36 class FTriangleMeshImplicitObject;
65 return ChildOrFaceIndex[ChildIndex];
70 return FaceCount[ChildIndex];
97 Ar << ChildOrFaceIndex[0];
100 Ar << ChildOrFaceIndex[1];
106 int32 ChildOrFaceIndex[2];
121 template <
typename SQVisitor>
147 template <
typename SQVisitor>
175 template <
typename SQVisitor>
180 const bool bHit = Bounds.Intersects(AABB);
193 template <
typename SQVisitor>
198 const bool bHit =
Obb.IntersectAABB(Bounds);
211 template <
typename QueryGeomType>
213 template <
typename QueryGeomType>
217 template <
typename BoundsFilterType,
typename FaceVisitorType>
220 const int32 EndIndex = (StartIndex + IndexCount);
234 template <
typename BoundsFilterType,
typename FaceVisitorType>
249 for (
int32 ChildIndex = 0; ChildIndex < 2; ++ChildIndex)
349 : LargeIdxBuffer(
MoveTemp(Elements))
350 , bRequiresLargeIndices(
true)
355 : SmallIdxBuffer(
MoveTemp(Elements))
356 , bRequiresLargeIndices(
false)
366 LargeIdxBuffer.Empty();
367 SmallIdxBuffer.Empty();
368 bRequiresLargeIndices =
true;
369 LargeIdxBuffer =
MoveTemp(Elements);
374 LargeIdxBuffer.Empty();
375 SmallIdxBuffer.Empty();
376 bRequiresLargeIndices =
false;
377 SmallIdxBuffer =
MoveTemp(Elements);
386 Ar << LargeIdxBuffer;
387 bRequiresLargeIndices =
true;
391 Ar << bRequiresLargeIndices;
392 if (bRequiresLargeIndices)
394 Ar << LargeIdxBuffer;
398 Ar << SmallIdxBuffer;
405 return bRequiresLargeIndices;
410 check(bRequiresLargeIndices);
411 return LargeIdxBuffer;
416 check(!bRequiresLargeIndices);
417 return SmallIdxBuffer;
422 if(bRequiresLargeIndices)
424 return LargeIdxBuffer.Num();
427 return SmallIdxBuffer.Num();
430 template<
typename ExpectedType>
433 if constexpr(std::is_same_v<ExpectedType, LargeIdxType>)
435 check(bRequiresLargeIndices);
436 return LargeIdxBuffer;
438 else if constexpr(std::is_same_v<ExpectedType, SmallIdxType>)
440 check(!bRequiresLargeIndices);
441 return SmallIdxBuffer;
445 static_assert(
sizeof(
ExpectedType) == 0,
"Unsupported index buffer type");
446 return SmallIdxBuffer;
453 bool bRequiresLargeIndices;
462 template <
typename IdxType,
typename ParticlesType>
466 OutA = Particles.GetX(Elements[
TriIdx][0]) * TriMeshScale;
467 OutB = Particles.GetX(Elements[
TriIdx][1]) * TriMeshScale;
468 OutC = Particles.GetX(Elements[
TriIdx][2]) * TriMeshScale;
471 template <
typename IdxType,
typename ParticlesType>
497 template <
typename IdxType>
515 MLocalBoundingBox =
FAABB3(MParticles.
GetX(FirstTri[0]), MParticles.
GetX(FirstTri[0]));
519 for(
int32 TriangleIndex = 1; TriangleIndex < NumTriangles; ++TriangleIndex)
555 CHAOS_API bool SweepGeom(
const FSphere& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
556 CHAOS_API bool SweepGeom(
const TBox<FReal, 3>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
557 CHAOS_API bool SweepGeom(
const FCapsule& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
558 CHAOS_API bool SweepGeom(
const FConvex& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
560 CHAOS_API bool SweepGeom(
const TImplicitObjectScaled<FSphere>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
561 CHAOS_API bool SweepGeom(
const TImplicitObjectScaled<
TBox<FReal, 3>>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
562 CHAOS_API bool SweepGeom(
const TImplicitObjectScaled<FCapsule>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
563 CHAOS_API bool SweepGeom(
const TImplicitObjectScaled<FConvex>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness = 0,
const bool bComputeMTD =
false,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
566 CHAOS_API bool SweepGeomCCD(
const FSphere& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
567 CHAOS_API bool SweepGeomCCD(
const TBox<FReal, 3>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
568 CHAOS_API bool SweepGeomCCD(
const FCapsule& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
569 CHAOS_API bool SweepGeomCCD(
const FConvex& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
570 CHAOS_API bool SweepGeomCCD(
const TImplicitObjectScaled<FSphere>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
571 CHAOS_API bool SweepGeomCCD(
const TImplicitObjectScaled<
TBox<FReal, 3>>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
572 CHAOS_API bool SweepGeomCCD(
const TImplicitObjectScaled<FCapsule>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
573 CHAOS_API bool SweepGeomCCD(
const TImplicitObjectScaled<FConvex>& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale =
FVec3(1.0f))
const;
599 return MLocalBoundingBox;
604 return FAABB3f(MLocalBoundingBox);
656 RebuildFastBVHFromTree(BVH);
672 Ar << MaterialIndices;
690 if (ExternalFaceIndexMap ==
nullptr)
697 Ar << *ExternalFaceIndexMap;
708 Ar << *ExternalVertexIndexMap;
712 if (ExternalVertexIndexMap ==
nullptr)
719 Ar << *ExternalVertexIndexMap;
729 return FString::Printf(
TEXT(
"TriangleMesh"));
774 template<
typename TriangleVisitor>
807 CHAOS_API void RebuildFastBVHFromTree(
const BVHType& BVH);
816 bool bCullsBackFaceRaycast;
819 template <
typename IdxType>
824 , MLocalBoundingBox(MParticles.GetX(0), MParticles.GetX(0))
836 MLocalBoundingBox =
FAABB3(MParticles.GetX(FirstTri[0]), MParticles.GetX(FirstTri[0]));
837 MLocalBoundingBox.
GrowToInclude(MParticles.GetX(FirstTri[1]));
838 MLocalBoundingBox.
GrowToInclude(MParticles.GetX(FirstTri[2]));
840 for(
int32 TriangleIndex = 1; TriangleIndex < NumTriangles; ++TriangleIndex)
852 template<
typename InStorageType,
typename InRealType>
854 template <
typename QueryGeomType>
857 template<
bool bRequiresLargeIndex>
863 bool HasBoundingBox()
const {
return true; }
871 Bounds.GrowToInclude(TmData->MParticles.GetX(
Elements[
Index][1]));
872 Bounds.GrowToInclude(TmData->MParticles.GetX(
Elements[
Index][2]));
879 return LambdaHelper(TmData->MElements.GetLargeIndexBuffer());
883 return LambdaHelper(TmData->MElements.GetSmallIndexBuffer());
887 template<
typename TPayloadType>
893 FUniqueIdx UniqueIdx()
const
895 return FUniqueIdx(
Index);
901 template<
typename Geom,
typename IdxType>
904 template<
typename Geom,
typename IdxType>
913 template <
typename QueryGeomType>
916 template<
bool IsSpherical,
typename QueryGeomType>
919 template<
typename QueryGeomType>
920 bool SweepGeomImp(
const QueryGeomType& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FReal Thickness,
const bool bComputeMTD,
FVec3 TriMeshScale =
FVec3(1.0f))
const;
922 template <
typename QueryGeomType>
923 bool SweepGeomCCDImp(
const QueryGeomType& QueryGeom,
const FRigidTransform3& StartTM,
const FVec3& Dir,
const FReal Length,
const FReal IgnorePenetration,
const FReal TargetPenetration,
FReal&
OutTOI,
FReal& OutPhi,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex,
FVec3& OutFaceNormal,
const FVec3& TriMeshScale)
const;
925 template <
typename IdxType>
928 template <
typename IdxType>
931 template<
typename IdxType>
934 template <
typename IdxType>
937 template <
typename IdxType>
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define FVector
Definition IOSSystemIncludes.h:8
FORCEINLINE VectorRegister4Float VectorSubtract(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:731
FORCEINLINE VectorRegister4Float VectorDivide(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:834
FORCEINLINE VectorRegister4Float VectorLoadFloat1(const float *Ptr)
Definition UnrealMathFPU.h:468
FORCEINLINE VectorRegister4Float VectorCompareGT(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:974
FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble(uint64 X, uint64 Y, uint64 Z, uint64 W)
Definition UnrealMathFPU.h:185
FORCEINLINE VectorRegister4Float VectorAbs(const VectorRegister4Float &Vec)
Definition UnrealMathFPU.h:661
FORCEINLINE VectorRegister4Float VectorAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:704
void VectorStoreAligned(const VectorRegister4Float &Vec, float *Ptr)
Definition UnrealMathFPU.h:534
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatFromDouble(const VectorRegister4Double &Vec4d)
Definition UnrealMathFPU.h:262
FORCEINLINE VectorRegister4Float VectorOne(void)
Definition UnrealMathVectorCommon.h.inl:21
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FORCEINLINE VectorRegister4Float VectorBitwiseNotAnd(const VectorRegister4Float &A, const VectorRegister4Float &B)
Definition VectorUtility.h:289
Definition AABBVectorized.h:15
FORCEINLINE_DEBUGGABLE const VectorRegister4Float & GetMin() const
Definition AABBVectorized.h:38
FORCEINLINE_DEBUGGABLE const VectorRegister4Float & GetMax() const
Definition AABBVectorized.h:39
Definition ChaosArchive.h:167
Definition ImplicitObject.h:111
bool HasBoundingBox() const
Definition ImplicitObject.h:275
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
CHAOS_API void SerializeImp(FArchive &Ar)
Definition ImplicitObject.cpp:337
Definition TriangleMeshImplicitObject.h:490
virtual CHAOS_API ~FTriangleMeshImplicitObject()
friend struct FBvEntry
Definition TriangleMeshImplicitObject.h:853
CHAOS_API const ParticlesType & Particles() const
Definition TriangleMeshImplicitObject.cpp:2042
CHAOS_API bool GetCullsBackFaceRaycast() const
Definition TriangleMeshImplicitObject.cpp:1031
CHAOS_API bool SweepGeomCCD(const FSphere &QueryGeom, const FRigidTransform3 &StartTM, const FVec3 &Dir, const FReal Length, const FReal IgnorePenetration, const FReal TargetPenetration, FReal &OutTOI, FReal &OutPhi, FVec3 &OutPosition, FVec3 &OutNormal, int32 &OutFaceIndex, FVec3 &OutFaceNormal, const FVec3 &TriMeshScale=FVec3(1.0f)) const
Definition TriangleMeshImplicitObject.cpp:1785
virtual FString ToString() const
Definition TriangleMeshImplicitObject.h:727
CHAOS_API TUniquePtr< FTriangleMeshImplicitObject > CopySlow() const
virtual CHAOS_API uint16 GetMaterialIndex(uint32 HintIndex) const override
Definition TriangleMeshImplicitObject.cpp:2031
CHAOS_API const FTrimeshIndexBuffer & Elements() const
Definition TriangleMeshImplicitObject.cpp:2047
CHAOS_API void UpdateVertices(const TArray< FVector > &Positions)
Definition TriangleMeshImplicitObject.cpp:2095
CHAOS_API void SetCullsBackFaceRaycast(const bool bInCullsBackFace)
Definition TriangleMeshImplicitObject.cpp:1036
virtual FReal GetRadius() const override
Definition TriangleMeshImplicitObject.h:535
CHAOS_API FVec3 GetFaceNormal(const int32 FaceIdx) const
Definition TriangleMeshImplicitObject.cpp:1994
void GetTransformedTriangle(const int32 TriangleIndex, const FRigidTransform3 &Transform, FTriangle &OutTriangle, int32 &OutVertexIndex0, int32 &OutVertexIndex1, int32 &OutVertexIndex2) const
Generate the triangle at the specified index with the specified transform (including scale)
Definition TriangleMeshImplicitObject.h:747
void VisitTriangles(const FAABB3 &QueryBounds, const FRigidTransform3 &QueryTransform, const TriangleVisitor &Visitor) const
Definition TriangleMeshImplicitObject.h:775
virtual CHAOS_API uint32 GetTypeHash() const override
Definition TriangleMeshImplicitObject.cpp:1968
CHAOS_API bool OverlapGeom(const FSphere &QueryGeom, const FRigidTransform3 &QueryTM, const FReal Thickness, FMTDInfo *OutMTD=nullptr) const
Definition TriangleMeshImplicitObject.cpp:1188
FTriangleMeshImplicitObject(FTriangleMeshImplicitObject &&Other)=delete
virtual CHAOS_API FReal PhiWithNormal(const FVec3 &x, FVec3 &Normal) const override
Definition TriangleMeshImplicitObject.cpp:806
TParticles< FRealSingle, 3 > ParticlesType
Definition TriangleMeshImplicitObject.h:494
virtual CHAOS_API Chaos::FImplicitObjectPtr CopyGeometry() const
Definition TriangleMeshImplicitObject.cpp:1954
static constexpr EImplicitObjectType StaticType()
Definition TriangleMeshImplicitObject.h:607
virtual CHAOS_API FVec3 FindGeometryOpposingNormal(const FVec3 &DenormDir, int32 FaceIndex, const FVec3 &OriginalNormal) const override
Definition TriangleMeshImplicitObject.cpp:1909
FTriangleMeshImplicitObject(const FTriangleMeshImplicitObject &Other)=delete
void FindOverlappingTriangles(const FAABB3 &QueryBounds, TArray< int32 > &OutTriangleIndices) const
Get a list of triangle indices that overlap the query bounds.
Definition TriangleMeshImplicitObject.h:763
virtual CHAOS_API Chaos::FImplicitObjectPtr DeepCopyGeometry() const
Definition TriangleMeshImplicitObject.cpp:1942
CHAOS_API bool SweepGeom(const FSphere &QueryGeom, const FRigidTransform3 &StartTM, const FVec3 &Dir, const FReal Length, FReal &OutTime, FVec3 &OutPosition, FVec3 &OutNormal, int32 &OutFaceIndex, FVec3 &OutFaceNormal, const FReal Thickness=0, const bool bComputeMTD=false, FVec3 TriMeshScale=FVec3(1.0f)) const
FTriangleMeshImplicitObject(ParticlesType &&Particles, TArray< TVec3< IdxType > > &&Elements, TArray< uint16 > &&InMaterialIndices, TUniquePtr< TArray< int32 > > &&InExternalFaceIndexMap=nullptr, TUniquePtr< TArray< int32 > > &&InExternalVertexIndexMap=nullptr, const bool bInCullsBackFaceRaycast=false)
Definition TriangleMeshImplicitObject.h:498
virtual CHAOS_API int32 FindMostOpposingFace(const FVec3 &Position, const FVec3 &UnitDir, int32 HintFaceIndex, FReal SearchDistance) const override
Definition TriangleMeshImplicitObject.cpp:1884
CHAOS_API bool GJKContactPoint(const FSphere &QueryGeom, const FRigidTransform3 &QueryTM, const FReal Thickness, FVec3 &Location, FVec3 &Normal, FReal &Penetration, int32 &FaceIndex) const
Definition TriangleMeshImplicitObject.cpp:978
virtual const FAABB3 BoundingBox() const override
Definition TriangleMeshImplicitObject.h:597
const FAABB3f BoundingBoxf() const
Definition TriangleMeshImplicitObject.h:602
void SerializeImp(FChaosArchive &Ar)
Definition TriangleMeshImplicitObject.h:618
UE_INTERNAL CHAOS_API const FTrimeshBVH & GetBVH() const
Definition TriangleMeshImplicitObject.cpp:890
virtual CHAOS_API int32 FindMostOpposingFaceScaled(const FVec3 &Position, const FVec3 &UnitDir, int32 HintFaceIndex, FReal SearchDist, const FVec3 &Scale) const override
Definition TriangleMeshImplicitObject.cpp:1897
CHAOS_API int32 GetExternalFaceIndexFromInternal(int32 InternalFaceIndex) const
Definition TriangleMeshImplicitObject.cpp:1018
void CollectTriangles(const FAABB3 &MeshQueryBounds, const FRigidTransform3 &MeshToObjectTransform, const FAABB3 &ObjectBounds, Private::FMeshContactGenerator &Collector) const
Definition TriangleMeshImplicitObject.cpp:858
Definition TriangleMeshImplicitObject.h:342
void Reinitialize(TArray< TVec3< SmallIdxType > > &&Elements)
Definition TriangleMeshImplicitObject.h:372
void Reinitialize(TArray< TVec3< LargeIdxType > > &&Elements)
Definition TriangleMeshImplicitObject.h:364
int32 LargeIdxType
Definition TriangleMeshImplicitObject.h:344
FTrimeshIndexBuffer(TArray< TVec3< LargeIdxType > > &&Elements)
Definition TriangleMeshImplicitObject.h:348
FTrimeshIndexBuffer(TArray< TVec3< SmallIdxType > > &&Elements)
Definition TriangleMeshImplicitObject.h:354
FTrimeshIndexBuffer()=default
FTrimeshIndexBuffer(const FTrimeshIndexBuffer &Other)=delete
int32 GetNumTriangles() const
Definition TriangleMeshImplicitObject.h:420
const TArray< TVec3< ExpectedType > > & GetIndexBuffer() const
Definition TriangleMeshImplicitObject.h:431
const TArray< TVec3< SmallIdxType > > & GetSmallIndexBuffer() const
Definition TriangleMeshImplicitObject.h:414
uint16 SmallIdxType
Definition TriangleMeshImplicitObject.h:345
bool RequiresLargeIndices() const
Definition TriangleMeshImplicitObject.h:403
void Serialize(FArchive &Ar)
Definition TriangleMeshImplicitObject.h:380
FTrimeshIndexBuffer & operator=(const FTrimeshIndexBuffer &Other)=delete
const TArray< TVec3< LargeIdxType > > & GetLargeIndexBuffer() const
Definition TriangleMeshImplicitObject.h:408
Definition OBBVectorized.h:14
Definition AABBTree.h:786
const TArray< TAABBTreeNode< T > > & GetNodes() const
Definition AABBTree.h:2720
FORCEINLINE void GrowToInclude(const TVector< T, d > &V)
Definition AABB.h:393
Definition BoundingVolume.h:118
static void SerializeAsAABB(FArchive &Ar, TAABB< T, d > &AABB)
Definition Box.h:467
Definition ImplicitObjectScaled.h:447
const TVector< T, d > & GetX(const int32 Index) const
Definition Particles.h:156
virtual void Serialize(void *V, int64 Length) override
Definition ArchiveProxy.h:97
Definition Archive.h:1208
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT void Push(ElementType &&Item)
Definition Array.h:1224
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
Definition UniquePtr.h:107
@ TriangleMesh
Definition ImplicitObjectType.h:24
Definition BodyInstance.h:90
Definition SkeletalMeshComponent.h:307
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
void TriangleMeshTransformVertsHelper(const FVec3 &TriMeshScale, int32 TriIdx, const ParticlesType &Particles, const TArray< TVector< IdxType, 3 > > &Elements, FVec3 &OutA, FVec3 &OutB, FVec3 &OutC)
Definition TriangleMeshImplicitObject.h:463
bool TriMeshPerPolySupport
Definition TriangleMeshImplicitObject.cpp:29
float FRealSingle
Definition Real.h:14
@ Raycast
Definition SimulationModuleBase.h:145
TVector< FReal, 3 > FVec3
Definition Core.h:17
TAABB< FRealSingle, 3 > FAABB3f
Definition Core.h:32
TAABB< FReal, 3 > FAABB3
Definition ImplicitObject.h:34
constexpr VectorRegister4Float SmallNumber
Definition UnrealMathVectorConstants.h.inl:53
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition GeometryQueries.h:27
Definition TriangleMeshImplicitObject.cpp:365
Definition TriangleMeshImplicitObject.cpp:1440
Definition TriangleMeshImplicitObject.cpp:1230
Definition TriangleMeshImplicitObject.h:56
const FAABBVectorized & GetBounds(int ChildIndex) const
Definition TriangleMeshImplicitObject.h:92
FORCEINLINE void SetBounds(int ChildIndex, const FAABB3 &AABB)
Definition TriangleMeshImplicitObject.h:83
void Serialize(FArchive &Ar)
Definition TriangleMeshImplicitObject.h:94
FChildData()
Definition TriangleMeshImplicitObject.h:57
FORCEINLINE void SetFaceCount(int ChildIndex, int32 InFaceCount)
Definition TriangleMeshImplicitObject.h:78
FORCEINLINE void SetChildOrFaceIndex(int ChildIndex, int32 InChildOrFaceIndex)
Definition TriangleMeshImplicitObject.h:73
FORCEINLINE int32 GetFaceCount(int ChildIndex) const
Definition TriangleMeshImplicitObject.h:68
FORCEINLINE int32 GetChildOrFaceIndex(int ChildIndex) const
Definition TriangleMeshImplicitObject.h:63
FORCEINLINE void SetBounds(int ChildIndex, const TAABB< FRealSingle, 3 > &AABB)
Definition TriangleMeshImplicitObject.h:87
Definition TriangleMeshImplicitObject.h:111
FNode()
Definition TriangleMeshImplicitObject.h:112
void Serialize(FArchive &Ar)
Definition TriangleMeshImplicitObject.h:114
FChildData Children
Definition TriangleMeshImplicitObject.h:118
Definition TriangleMeshImplicitObject.h:40
bool FindAllIntersectionsNoMTD(const Private::FOBBVectorized &Intersection, const TRigidTransform< FReal, 3 > &Transform, const QueryGeomType &QueryGeom, FReal Thickness, const FVec3 &TriMeshScale, const FTriangleMeshImplicitObject *TriMesh) const
Definition TriangleMeshImplicitObject.cpp:787
FORCEINLINE_DEBUGGABLE EVisitorResult VisitFaces(int32 StartIndex, int32 IndexCount, BoundsFilterType &BoundsFilter, FaceVisitorType &FaceVisitor) const
Definition TriangleMeshImplicitObject.h:218
FORCEINLINE_DEBUGGABLE void VisitTree(BoundsFilterType &BoundsFilter, FaceVisitorType &FaceVisitor) const
Definition TriangleMeshImplicitObject.h:235
EFilterResult
Definition TriangleMeshImplicitObject.h:50
TArray< FNode > Nodes
Definition TriangleMeshImplicitObject.h:287
TArray< FAABBVectorized > FaceBounds
Definition TriangleMeshImplicitObject.h:288
void Serialize(FChaosArchive &Ar)
Definition TriangleMeshImplicitObject.h:275
FORCEINLINE_DEBUGGABLE void Sweep(const FVec3 &Start, const FVec3 &Dir, const FReal Length, const FVec3 &QueryHalfExtents, SQVisitor &Visitor) const
Definition TriangleMeshImplicitObject.h:148
CHAOS_API TArray< int32 > FindAllIntersections(const FAABB3 &Intersection) const
Definition TriangleMeshImplicitObject.cpp:796
FORCEINLINE_DEBUGGABLE void OverlapOBB(const Private::FOBBVectorized &Obb, SQVisitor &Visitor) const
Definition TriangleMeshImplicitObject.h:194
EVisitorResult
Definition TriangleMeshImplicitObject.h:44
FORCEINLINE_DEBUGGABLE void Raycast(const FVec3 &Start, const FVec3 &Dir, const FReal Length, SQVisitor &Visitor) const
Definition TriangleMeshImplicitObject.h:122
FORCEINLINE_DEBUGGABLE void Overlap(const FAABBVectorized &AABB, SQVisitor &Visitor) const
Definition TriangleMeshImplicitObject.h:176
Definition AABBTree.h:260
CORE_API static const FGuid GUID
Definition ExternalPhysicsCustomObjectVersion.h:144
@ AddTrimeshMaterialIndices
Definition ExternalPhysicsCustomObjectVersion.h:70
@ RemovedConvexHullsFromTriangleMeshImplicitObject
Definition ExternalPhysicsCustomObjectVersion.h:16
@ TrimeshSerializesAABBTree
Definition ExternalPhysicsCustomObjectVersion.h:52
@ TriangleMeshHasFaceIndexMap
Definition ExternalPhysicsCustomObjectVersion.h:112
@ TrimeshSerializesBV
Definition ExternalPhysicsCustomObjectVersion.h:43
@ TrimeshCanUseSmallIndices
Definition ExternalPhysicsCustomObjectVersion.h:97
@ TriangleMeshHasVertexIndexMap
Definition PhysicsObjectVersion.h:25
CORE_API static const FGuid GUID
Definition PhysicsObjectVersion.h:78
CORE_API static const FGuid GUID
Definition UE5MainStreamObjectVersion.h:22
Definition UnrealMathFPU.h:20