29#ifndef NP_PVD_SCENEQUERYCOLLECTOR_H
30#define NP_PVD_SCENEQUERYCOLLECTOR_H
32#include "geometry/PxGeometryHelpers.h"
33#include "PxFiltering.h"
34#include "PxQueryReport.h"
35#include "PxQueryFiltering.h"
37#include "foundation/PxArray.h"
38#include "foundation/PxMutex.h"
48 struct QueryID {
enum Enum {
49 QUERY_RAYCAST_ANY_OBJECT,
50 QUERY_RAYCAST_CLOSEST_OBJECT,
51 QUERY_RAYCAST_ALL_OBJECTS,
53 QUERY_OVERLAP_SPHERE_ALL_OBJECTS,
54 QUERY_OVERLAP_AABB_ALL_OBJECTS,
55 QUERY_OVERLAP_OBB_ALL_OBJECTS,
56 QUERY_OVERLAP_CAPSULE_ALL_OBJECTS,
57 QUERY_OVERLAP_CONVEX_ALL_OBJECTS,
59 QUERY_LINEAR_OBB_SWEEP_CLOSEST_OBJECT,
60 QUERY_LINEAR_CAPSULE_SWEEP_CLOSEST_OBJECT,
61 QUERY_LINEAR_CONVEX_SWEEP_CLOSEST_OBJECT
67 PX_FORCE_INLINE PvdReference(
const char* arrayName, PxU32 baseIndex, PxU32 count) : mArrayName(arrayName), mBaseIndex(baseIndex), mCount(count) {}
69 const char* mArrayName;
77 PxFilterData mFilterData;
88 PxFilterData mFilterData;
91 PvdReference mGeometries;
101 PvdReference mGeometries;
103 PvdReference mFilterData;
121 setDefaults(0xFFFFffff, NULL, NULL);
124 explicit PvdSqHit(
const PxOverlapHit& hit)
126 setDefaults(hit.faceIndex, hit.shape, hit.actor);
129 explicit PvdSqHit(
const PxRaycastHit& hit)
131 setDefaults(hit.faceIndex, hit.shape, hit.actor);
133 mImpact = hit.position;
134 mNormal = hit.normal;
135 mDistance = hit.distance;
141 explicit PvdSqHit(
const PxSweepHit& hit)
143 setDefaults(hit.faceIndex, hit.shape, hit.actor);
145 mImpact = hit.position;
146 mNormal = hit.normal;
147 mDistance = hit.distance;
152 void setDefaults(PxU32 faceIndex,
const void* shape,
const void* actor)
156 mFaceIndex = faceIndex;
158 mImpact = mNormal = PxVec3(0.0f);
159 mDistance = mU = mV = 0.0f;
164class NamedArray :
public PxArray<T>
167 NamedArray(
const char* names[2]) { mNames[0] = names[0]; mNames[1] = names[1]; }
169 const char* mNames[2];
172class PvdSceneQueryCollector
174 PX_NOCOPY(PvdSceneQueryCollector)
176 PvdSceneQueryCollector(Vd::PvdSceneClient* pvd,
bool isBatched);
177 ~PvdSceneQueryCollector() {}
181 PxMutex::ScopedLock lock(mMutex);
183 mAccumulatedRaycastQueries.clear();
184 mAccumulatedOverlapQueries.clear();
185 mAccumulatedSweepQueries.clear();
191 void clearGeometryArrays()
193 mGeometries0.clear();
194 mGeometries1.clear();
199 void raycast(
const PxVec3& origin,
const PxVec3& unitDir, PxReal distance,
const PxRaycastHit* hit, PxU32 hitsNum,
const PxQueryFilterData& filterData,
bool multipleHits);
200 void sweep(
const PxGeometry& geometry,
const PxTransform& pose,
const PxVec3& unitDir, PxReal distance,
const PxSweepHit* hit, PxU32 hitsNum,
const PxQueryFilterData& filterData,
bool multipleHits);
201 void overlapMultiple(
const PxGeometry& geometry,
const PxTransform& pose,
const PxOverlapHit* hit, PxU32 hitsNum,
const PxQueryFilterData& filterData);
206 PX_FORCE_INLINE const char* getArrayName(
const NamedArray<T>& namedArray)
const {
return namedArray.mNames[mIsBatched]; }
208 PX_FORCE_INLINE const NamedArray<PxGeometryHolder>& getGeometries(PxU32 index)
const {
return index ? mGeometries1 : mGeometries0; }
209 PX_FORCE_INLINE NamedArray<PxGeometryHolder>& getGeometries(PxU32 index) {
return index ? mGeometries1 : mGeometries0; }
211 PX_FORCE_INLINE const NamedArray<PxGeometryHolder>& getCurrentFrameGeometries()
const {
return getGeometries(mInUse); }
212 PX_FORCE_INLINE const NamedArray<PxGeometryHolder>& getPrevFrameGeometries()
const {
return getGeometries(mInUse ^ 1); }
214 void prepareNextFrameGeometries()
217 getGeometries(mInUse).clear();
220 NamedArray<PvdRaycast> mAccumulatedRaycastQueries;
221 NamedArray<PvdSweep> mAccumulatedSweepQueries;
222 NamedArray<PvdOverlap> mAccumulatedOverlapQueries;
223 NamedArray<PvdSqHit> mPvdSqHits;
224 NamedArray<PxTransform> mPoses;
225 NamedArray<PxFilterData> mFilterData;
228 Vd::PvdSceneClient* mPVD;
230 NamedArray<PxGeometryHolder>mGeometries0;
231 NamedArray<PxGeometryHolder>mGeometries1;
233 const bool mIsBatched;
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39