65 int32 RootObjectIndex;
96 int32 ObjectBeginIndex;
98 int32 ChildNodeIndices[2];
138 const FVec3f&
GetX(
const int32 ObjectIndex)
const {
return Objects[ObjectIndex].GetX(); }
153 template<
typename TVisitor>
169 template<
typename TVisitor>
178 template<
typename TVisitor>
187 template<
typename TVisitor>
203 return IsOverlappingBoundsStack(
FAABB3f(LocalBounds));
206 template<
typename TVisitor>
219 return Nodes[NodeIndex].Bounds;
224 return Nodes[NodeIndex].IsLeaf();
236 template<
typename TVisitor>
251 const FImplicitBVHNode& Node = Nodes[NodeIndex];
253 if (Node.Bounds.Intersects(LocalBounds))
263 NodeIndex = Node.ChildNodeIndices[0];
264 NodeStack.
Push(Node.ChildNodeIndices[1]);
278 template<
typename TVisitor>
294 const FImplicitBVHNode& Node = Nodes[NodeIndex];
315 NodeIndex = NodeStack.
Top().Key;
321 template<
typename TVisitor>
324 if (
BVHA.Nodes.IsEmpty() ||
BVHB.Nodes.IsEmpty())
348 if (NodeA.IsLeaf() && NodeB.IsLeaf())
388 bool IsOverlappingBoundsStack(
const FAABB3f& LocalBounds)
const
402 const FImplicitBVHNode& Node = Nodes[NodeIndex];
404 if (Node.Bounds.Intersects(LocalBounds))
412 NodeIndex = Node.ChildNodeIndices[0];
413 NodeStack.
Push(Node.ChildNodeIndices[1]);
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
UE::Math::TQuat< float > FQuat4f
Definition MathFwd.h:76
Definition ChaosArchive.h:167
Definition ImplicitObject.h:111
Definition ImplicitObjectBVH.h:76
FImplicitBVHNode(const FAABB3f &InBounds, const int32 InObjectBeginIndex, const int32 InObjectEndIndex)
Definition ImplicitObjectBVH.h:78
bool IsLeaf() const
Definition ImplicitObjectBVH.h:86
Definition ImplicitObjectBVH.h:21
const FVec3f & GetX() const
Definition ImplicitObjectBVH.h:32
int32 GetRootObjectIndex() const
Definition ImplicitObjectBVH.h:53
FImplicitBVHObject()
Definition ImplicitObjectBVH.cpp:19
const FImplicitObject * GetGeometry() const
Definition ImplicitObjectBVH.h:30
int32 GetObjectIndex() const
Definition ImplicitObjectBVH.h:49
FRotation3f GetR() const
Definition ImplicitObjectBVH.h:34
const FAABB3f & GetBounds() const
Definition ImplicitObjectBVH.h:36
FRigidTransform3f GetTransformf() const
Definition ImplicitObjectBVH.h:40
FRigidTransform3 GetTransform() const
Definition ImplicitObjectBVH.h:42
const FVec3f GetBoundsCenter() const
Definition ImplicitObjectBVH.h:38
friend FChaosArchive & operator<<(FChaosArchive &Ar, FImplicitBVHObject &BVHObjecty)
Definition ImplicitObjectBVH.cpp:324
Definition ImplicitObjectBVH.h:104
int32 GetNumNodes() const
Definition ImplicitObjectBVH.h:212
static void VisitOverlappingLeafNodes(const FImplicitBVH &BVHA, const FImplicitBVH &BVHB, const FRigidTransform3 &TransformBToA, const TVisitor &LeafPairVisitor)
Definition ImplicitObjectBVH.h:207
static TUniquePtr< FImplicitBVH > TryMakeFromLeaves(TArray< FImplicitBVHObject > &&LeafObjects, const int32 InMinObjects, const int32 InMaxBVHDepth)
Definition ImplicitObjectBVH.cpp:117
static TUniquePtr< FImplicitBVH > TryMake(const TArrayView< const Chaos::FImplicitObjectPtr > &InRootObjects, const int32 MinObjects, const int32 InMaxBVHDepth)
Definition ImplicitObjectBVH.cpp:111
void VisitAllIntersections(const FAABB3 &LocalBounds, const TVisitor &ObjectVisitor) const
Definition ImplicitObjectBVH.h:154
FRigidTransform3 GetTransform(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:146
int32 GetDepth() const
Definition ImplicitObjectBVH.h:130
const TArray< FImplicitBVHObject > & GetObjects() const
Definition ImplicitObjectBVH.h:132
static void CollectLeafObject(const FImplicitObject *Object, const FRigidTransform3 &ParentTransform, const int32 RootObjectIndex, TArray< FImplicitBVHObject > &LeafObjects, const int32 LeafObjectIndex)
Definition ImplicitObjectBVH.cpp:70
bool NodeIsLeaf(const int32 NodeIndex) const
Definition ImplicitObjectBVH.h:222
const FImplicitObject * GetGeometry(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:136
TArray< FImplicitBVHObject > FObjects
Definition ImplicitObjectBVH.h:106
FRigidTransform3f GetTransformf(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:144
const FAABB3f & GetNodeBounds(const int32 NodeIndex) const
Definition ImplicitObjectBVH.h:217
const FVec3f & GetX(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:138
void VisitNodeObjects(const int32 NodeIndex, const TVisitor &ObjectVisitor) const
Definition ImplicitObjectBVH.h:188
int32 GetObjectIndex(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:149
~FImplicitBVH()
Definition ImplicitObjectBVH.cpp:144
bool IsOverlappingBounds(const FAABB3 &LocalBounds) const
Definition ImplicitObjectBVH.h:201
const FImplicitBVHObject & GetObject(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:134
int32 GetNumObjects() const
Definition ImplicitObjectBVH.h:129
static TUniquePtr< FImplicitBVH > MakeEmpty()
Definition ImplicitObjectBVH.cpp:106
int32 GetRootObjectIndex(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:148
void VisitNodes(const TVisitor &NodeVisitor) const
Definition ImplicitObjectBVH.h:179
FRotation3f GetR(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:140
static FObjects CollectLeafObjects(const TArrayView< const Chaos::FImplicitObjectPtr > &InRootObjects)
Definition ImplicitObjectBVH.cpp:86
friend FChaosArchive & operator<<(FChaosArchive &Ar, FImplicitBVH &BVH)
Definition ImplicitObjectBVH.cpp:319
static int32 CountLeafObjects(const TArrayView< const Chaos::FImplicitObjectPtr > &InRootObjects)
Definition ImplicitObjectBVH.cpp:44
void VisitOverlappingNodes(const FAABB3 &LocalBounds, const TVisitor &NodeVisitor) const
Definition ImplicitObjectBVH.h:170
const FAABB3f & GetBounds(const int32 ObjectIndex) const
Definition ImplicitObjectBVH.h:142
FORCEINLINE TVector< T, d > Center() const
Definition AABB.h:450
CHAOSCORE_API TAABB< T, d > TransformedAABB(const FTransform &) const
Definition AABB.cpp:385
Definition Serializable.h:10
Definition MemStack.h:506
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT void Push(ElementType &&Item)
Definition Array.h:1224
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
ElementType Pop(EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:1196
UE_NODEBUG UE_FORCEINLINE_HINT ElementType & Top() UE_LIFETIMEBOUND
Definition Array.h:1248
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UnrealString.h.inl:34
Definition MemStack.h:391
static FORCEINLINE FMemStack & Get()
Definition ThreadSingleton.h:101
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
const TAABB< T, d > GetWorldSpaceBoundingBox(const OBJECT_ARRAY &Objects, const int32 i, const TMap< int32, TAABB< T, d > > &WorldSpaceBoxes)
Definition BoundingVolumeUtilities.h:143
TRigidTransform< FReal, 3 > FRigidTransform3
Definition Core.h:22
TRotation< FReal, 3 > FRotation3
Definition Core.h:19
bool HasBoundingBox(const OBJECT_ARRAY &Objects, const int32 i)
Definition BoundingVolumeUtilities.h:97
TVector< FReal, 3 > FVec3
Definition Core.h:17
TAABB< FRealSingle, 3 > FAABB3f
Definition Core.h:32
TRigidTransform< FRealSingle, 3 > FRigidTransform3f
Definition Core.h:29
void ComputeAllWorldSpaceBoundingBoxes(const OBJECT_ARRAY &Objects, const TArray< int32 > &AllObjects, const bool bUseVelocity, const T Dt, TMap< int32, TAABB< T, d > > &WorldSpaceBoxes)
Definition BoundingVolumeUtilities.h:329
TRotation< FRealSingle, 3 > FRotation3f
Definition Core.h:28
Definition OverriddenPropertySet.cpp:45