UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SQAccelerator.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Chaos/Real.h"
7#include "ChaosSQTypes.h"
8#include "Containers/Array.h"
10#include "Math/MathFwd.h"
11#include "Math/Transform.h"
14
15namespace ChaosInterface { struct FOverlapHit; }
16namespace ChaosInterface { struct FPTOverlapHit; }
17namespace ChaosInterface { struct FPTRaycastHit; }
18namespace ChaosInterface { struct FPTSweepHit; }
19namespace ChaosInterface { struct FRaycastHit; }
20namespace ChaosInterface { struct FSweepHit; }
21namespace ChaosInterface { template <typename HitType> class FSQHitBuffer; }
22
23namespace Chaos
24{
25 class FAccelerationStructureHandle;
26 class FImplicitObject;
27 template <typename TPayload, typename T, int d>
28 class ISpatialAcceleration;
29}
30
31class FSQAccelerator;
36
38{
39public:
40
43
44 PHYSICSCORE_API void Raycast(const FVector& Start, const FVector& Dir, const float DeltaMagnitude, ChaosInterface::FSQHitBuffer<ChaosInterface::FRaycastHit>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback, const ChaosInterface::FQueryDebugParams& DebugParams = {}) const;
45 PHYSICSCORE_API void Raycast(const FVector& Start, const FVector& Dir, const float DeltaMagnitude, ChaosInterface::FSQHitBuffer<ChaosInterface::FPTRaycastHit>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback, const ChaosInterface::FQueryDebugParams& DebugParams = {}) const;
46
47 PHYSICSCORE_API void Sweep(const Chaos::FImplicitObject& QueryGeom, const FTransform& StartTM, const FVector& Dir, const float DeltaMagnitude, ChaosInterface::FSQHitBuffer<ChaosInterface::FSweepHit>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback, const ChaosInterface::FQueryDebugParams& DebugParams = {}) const;
48 PHYSICSCORE_API void Sweep(const Chaos::FImplicitObject& QueryGeom, const FTransform& StartTM, const FVector& Dir, const float DeltaMagnitude, ChaosInterface::FSQHitBuffer<ChaosInterface::FPTSweepHit>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback, const ChaosInterface::FQueryDebugParams& DebugParams = {}) const;
49
52
53private:
55
56 template <typename TRaycastHit>
57 void RaycastImp(const FVector& Start, const FVector& Dir, const float DeltaMagnitude, ChaosInterface::FSQHitBuffer<TRaycastHit>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback, const ChaosInterface::FQueryDebugParams& DebugParams) const;
58
59};
60
61// An interface to the scene query accelerator that allows us to run queries against either PhysX or Chaos
62// This was used in the 2019 GDC demos and is now broken. To make it work again, we would need to implement
63// the FChaosSQAcceleratorAdapter below to use its internal SQ accelerator and convert the inputs and outputs
64// from/to PhysX types.
66{
67public:
68 virtual ~ISQAccelerator() {};
69 virtual void Raycast(const FVector& Start, const FVector& Dir, const float DeltaMagnitude, FPhysicsHitCallback<FHitRaycast>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback) const = 0;
70 virtual void Sweep(const FPhysicsGeometry& QueryGeom, const FTransform& StartTM, const FVector& Dir, const float DeltaMagnitude, FPhysicsHitCallback<FHitSweep>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback) const = 0;
71 virtual void Overlap(const FPhysicsGeometry& QueryGeom, const FTransform& GeomPose, FPhysicsHitCallback<FHitOverlap>& HitBuffer, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback) const = 0;
72};
73
75{
76public:
77
78 PHYSICSCORE_API virtual void Raycast(const FVector& Start, const FVector& Dir, const float DeltaMagnitude, FPhysicsHitCallback<FHitRaycast>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback) const override;
79 PHYSICSCORE_API virtual void Sweep(const FPhysicsGeometry& QueryGeom, const FTransform& StartTM, const FVector& Dir, const float DeltaMagnitude, FPhysicsHitCallback<FHitSweep>& HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback) const override;
80 PHYSICSCORE_API virtual void Overlap(const FPhysicsGeometry& QueryGeom, const FTransform& GeomPose, FPhysicsHitCallback<FHitOverlap>& HitBuffer, const ChaosInterface::FQueryFilterData& QueryFilterData, ICollisionQueryFilterCallbackBase& QueryCallback) const override;
81
84
85private:
86 TArray<ISQAccelerator*> Accelerators;
87};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EHitFlags
Definition PhysicsInterfaceWrapperShared.h:65
Definition SQTypes.h:220
Definition ImplicitObject.h:111
Definition ISpatialAcceleration.h:267
Definition SQAccelerator.h:38
virtual ~FChaosSQAccelerator()
Definition SQAccelerator.h:42
Definition SQAccelerator.h:75
PHYSICSCORE_API void AddSQAccelerator(ISQAccelerator *InAccelerator)
Definition SQAccelerator.cpp:42
PHYSICSCORE_API void RemoveSQAccelerator(ISQAccelerator *AcceleratorToRemove)
Definition SQAccelerator.cpp:47
Definition CollisionQueryFilterCallbackCore.h:25
Definition SQAccelerator.h:66
virtual void Overlap(const FPhysicsGeometry &QueryGeom, const FTransform &GeomPose, FPhysicsHitCallback< FHitOverlap > &HitBuffer, const ChaosInterface::FQueryFilterData &QueryFilterData, ICollisionQueryFilterCallbackBase &QueryCallback) const =0
virtual ~ISQAccelerator()
Definition SQAccelerator.h:68
virtual void Raycast(const FVector &Start, const FVector &Dir, const float DeltaMagnitude, FPhysicsHitCallback< FHitRaycast > &HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData &QueryFilterData, ICollisionQueryFilterCallbackBase &QueryCallback) const =0
virtual void Sweep(const FPhysicsGeometry &QueryGeom, const FTransform &StartTM, const FVector &Dir, const float DeltaMagnitude, FPhysicsHitCallback< FHitSweep > &HitBuffer, EHitFlags OutputFlags, const ChaosInterface::FQueryFilterData &QueryFilterData, ICollisionQueryFilterCallbackBase &QueryCallback) const =0
Definition Array.h:670
Definition ChaosInterfaceUtils.cpp:28
Definition SkeletalMeshComponent.h:307
Definition ChaosInterfaceWrapperCore.h:79
Definition PhysicsInterfaceTypesCore.h:390
Definition CollisionFilterData.h:46
Definition CollisionQueryParams.h:43