00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PX_PHYSICS_NX_SCENE
00032 #define PX_PHYSICS_NX_SCENE
00033
00037 #include "PxVisualizationParameter.h"
00038 #include "PxSceneDesc.h"
00039 #include "PxSimulationStatistics.h"
00040 #include "PxQueryReport.h"
00041 #include "PxQueryFiltering.h"
00042 #include "PxClient.h"
00043 #include "task/PxTask.h"
00044
00045 #include "pvd/PxPvdSceneClient.h"
00046
00047 #if !PX_DOXYGEN
00048 namespace physx
00049 {
00050 #endif
00051
00052 class PxRigidStatic;
00053 class PxRigidDynamic;
00054 class PxConstraint;
00055 class PxMaterial;
00056 class PxSimulationEventCallback;
00057 class PxPhysics;
00058 class PxBatchQueryDesc;
00059 class PxBatchQuery;
00060 class PxAggregate;
00061 class PxRenderBuffer;
00062
00063 class PxSphereGeometry;
00064 class PxBoxGeometry;
00065 class PxCapsuleGeometry;
00066
00067 class PxPruningStructure;
00068 class PxBVHStructure;
00069 struct PxContactPairHeader;
00070
00071 typedef PxU8 PxDominanceGroup;
00072
00073 class PxPvdSceneClient;
00074
00083 struct PxDominanceGroupPair
00084 {
00085 PxDominanceGroupPair(PxU8 a, PxU8 b)
00086 : dominance0(a), dominance1(b) {}
00087 PxU8 dominance0;
00088 PxU8 dominance1;
00089 };
00090
00091
00099 struct PxActorTypeFlag
00100 {
00101 enum Enum
00102 {
00107 eRIGID_STATIC = (1 << 0),
00108
00113 eRIGID_DYNAMIC = (1 << 1)
00114 };
00115 };
00116
00122 typedef PxFlags<PxActorTypeFlag::Enum,PxU16> PxActorTypeFlags;
00123 PX_FLAGS_OPERATORS(PxActorTypeFlag::Enum,PxU16)
00124
00125
00143 struct PxQueryCache
00144 {
00148 PX_INLINE PxQueryCache() : shape(NULL), actor(NULL), faceIndex(0xffffffff) {}
00149
00153 PX_INLINE PxQueryCache(PxShape* s, PxU32 findex) : shape(s), actor(NULL), faceIndex(findex) {}
00154
00155 PxShape* shape;
00156 PxRigidActor* actor;
00157 PxU32 faceIndex;
00158 };
00159
00169 class PxScene
00170 {
00171 protected:
00172
00173
00174
00178
00179 PxScene(): userData(0) {}
00180 virtual ~PxScene() {}
00181
00182 public:
00183
00195 virtual void release() = 0;
00196
00204 virtual void setFlag(PxSceneFlag::Enum flag, bool value) = 0;
00205
00213 virtual PxSceneFlags getFlags() const = 0;
00214
00215
00226 virtual void setLimits(const PxSceneLimits& limits) = 0;
00227
00233 virtual PxSceneLimits getLimits() const = 0;
00234
00235
00243 virtual PxPhysics& getPhysics() = 0;
00244
00250 virtual PxU32 getTimestamp() const = 0;
00251
00252
00254
00255
00268 virtual void addArticulation(PxArticulationBase& articulation) = 0;
00269
00282 virtual void removeArticulation(PxArticulationBase& articulation, bool wakeOnLostTouch = true) = 0;
00283
00284
00286
00287
00288
00311 virtual void addActor(PxActor& actor, const PxBVHStructure* bvhStructure = NULL) = 0;
00312
00331 virtual void addActors(PxActor*const* actors, PxU32 nbActors) = 0;
00332
00351 virtual void addActors(const PxPruningStructure& pruningStructure) = 0;
00352
00369 virtual void removeActor(PxActor& actor, bool wakeOnLostTouch = true) = 0;
00370
00386 virtual void removeActors(PxActor*const* actors, PxU32 nbActors, bool wakeOnLostTouch = true) = 0;
00387
00400 virtual void addAggregate(PxAggregate& aggregate) = 0;
00401
00414 virtual void removeAggregate(PxAggregate& aggregate, bool wakeOnLostTouch = true) = 0;
00415
00428 virtual void addCollection(const PxCollection& collection) = 0;
00430
00431
00435
00444 virtual PxU32 getNbActors(PxActorTypeFlags types) const = 0;
00445
00457 virtual PxU32 getActors(PxActorTypeFlags types, PxActor** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00458
00473 virtual PxActor** getActiveActors(PxU32& nbActorsOut) = 0;
00474
00482 virtual PxU32 getNbArticulations() const = 0;
00483
00494 virtual PxU32 getArticulations(PxArticulationBase** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00495
00503 virtual PxU32 getNbConstraints() const = 0;
00504
00515 virtual PxU32 getConstraints(PxConstraint** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00516
00517
00525 virtual PxU32 getNbAggregates() const = 0;
00526
00537 virtual PxU32 getAggregates(PxAggregate** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00538
00540
00541
00545
00596 virtual void setDominanceGroupPair(
00597 PxDominanceGroup group1, PxDominanceGroup group2, const PxDominanceGroupPair& dominance) = 0;
00598
00604 virtual PxDominanceGroupPair getDominanceGroupPair(PxDominanceGroup group1, PxDominanceGroup group2) const = 0;
00605
00607
00608
00612
00618 virtual PxCpuDispatcher* getCpuDispatcher() const = 0;
00619
00627 virtual PxGpuDispatcher* getGpuDispatcher() const = 0;
00628
00630
00643 virtual PxClientID createClient() = 0;
00644
00646
00647
00648
00652
00662 virtual void setSimulationEventCallback(PxSimulationEventCallback* callback) = 0;
00663
00671 virtual PxSimulationEventCallback* getSimulationEventCallback() const = 0;
00672
00680 virtual void setContactModifyCallback(PxContactModifyCallback* callback) = 0;
00681
00689 virtual void setCCDContactModifyCallback(PxCCDContactModifyCallback* callback) = 0;
00690
00698 virtual PxContactModifyCallback* getContactModifyCallback() const = 0;
00699
00707 virtual PxCCDContactModifyCallback* getCCDContactModifyCallback() const = 0;
00708
00716 virtual void setBroadPhaseCallback(PxBroadPhaseCallback* callback) = 0;
00717
00725 virtual PxBroadPhaseCallback* getBroadPhaseCallback() const = 0;
00726
00728
00729
00733
00750 virtual void setFilterShaderData(const void* data, PxU32 dataSize) = 0;
00751
00761 virtual const void* getFilterShaderData() const = 0;
00762
00770 virtual PxU32 getFilterShaderDataSize() const = 0;
00771
00779 virtual PxSimulationFilterShader
00780 getFilterShader() const = 0;
00781
00789 virtual PxSimulationFilterCallback*
00790 getFilterCallback() const = 0;
00791
00821 virtual void resetFiltering(PxActor& actor) = 0;
00822
00837 virtual void resetFiltering(PxRigidActor& actor, PxShape*const* shapes, PxU32 shapeCount) = 0;
00838
00840
00841
00876 virtual void simulate(PxReal elapsedTime, physx::PxBaseTask* completionTask = NULL,
00877 void* scratchMemBlock = 0, PxU32 scratchMemBlockSize = 0, bool controlSimulation = true) = 0;
00878
00879
00890 virtual void advance(physx::PxBaseTask* completionTask = 0) = 0;
00891
00909 virtual void collide(PxReal elapsedTime, physx::PxBaseTask* completionTask = 0, void* scratchMemBlock = 0,
00910 PxU32 scratchMemBlockSize = 0, bool controlSimulation = true) = 0;
00911
00923 virtual bool checkResults(bool block = false) = 0;
00924
00932 virtual bool fetchCollision(bool block = false) = 0;
00933
00955 virtual bool fetchResults(bool block = false, PxU32* errorState = 0) = 0;
00956
00957
00973 virtual bool fetchResultsStart(const PxContactPairHeader*& contactPairs, PxU32& nbContactPairs, bool block = false) = 0;
00974
00975
00984 virtual void processCallbacks(physx::PxBaseTask* continuation) = 0;
00985
00986
00998 virtual void fetchResultsFinish(PxU32* errorState = 0) = 0;
00999
01000
01011 virtual void flushSimulation(bool sendPendingReports = false) = 0;
01012
01022 virtual void setGravity(const PxVec3& vec) = 0;
01023
01031 virtual PxVec3 getGravity() const = 0;
01032
01038 virtual void setBounceThresholdVelocity(const PxReal t) = 0;
01039
01045 virtual PxReal getBounceThresholdVelocity() const = 0;
01046
01047
01056 virtual void setCCDMaxPasses(PxU32 ccdMaxPasses) = 0;
01057
01066 virtual PxU32 getCCDMaxPasses() const = 0;
01067
01073 virtual PxReal getFrictionOffsetThreshold() const = 0;
01074
01079 virtual void setFrictionType(PxFrictionType::Enum frictionType) = 0;
01080
01085 virtual PxFrictionType::Enum getFrictionType() const = 0;
01086
01088
01089
01104 virtual bool setVisualizationParameter(PxVisualizationParameter::Enum param, PxReal value) = 0;
01105
01114 virtual PxReal getVisualizationParameter(PxVisualizationParameter::Enum paramEnum) const = 0;
01115
01116
01123 virtual void setVisualizationCullingBox(const PxBounds3& box) = 0;
01124
01131 virtual PxBounds3 getVisualizationCullingBox() const = 0;
01132
01144 virtual const PxRenderBuffer& getRenderBuffer() = 0;
01145
01155 virtual void getSimulationStatistics(PxSimulationStatistics& stats) const = 0;
01156
01157
01159
01160
01164
01170 virtual PxPruningStructureType::Enum getStaticStructure() const = 0;
01171
01177 virtual PxPruningStructureType::Enum getDynamicStructure() const = 0;
01178
01194 virtual void flushQueryUpdates() = 0;
01195
01207 PX_DEPRECATED virtual PxBatchQuery* createBatchQuery(const PxBatchQueryDesc& desc) = 0;
01208
01216 virtual void setDynamicTreeRebuildRateHint(PxU32 dynamicTreeRebuildRateHint) = 0;
01217
01225 virtual PxU32 getDynamicTreeRebuildRateHint() const = 0;
01226
01235 virtual void forceDynamicTreeRebuild(bool rebuildStaticStructure, bool rebuildDynamicStructure) = 0;
01236
01244 virtual void setSceneQueryUpdateMode(PxSceneQueryUpdateMode::Enum updateMode) = 0;
01245
01253 virtual PxSceneQueryUpdateMode::Enum getSceneQueryUpdateMode() const = 0;
01254
01272 virtual void sceneQueriesUpdate(physx::PxBaseTask* completionTask = NULL, bool controlSimulation = true) = 0;
01273
01285 virtual bool checkQueries(bool block = false) = 0;
01286
01296 virtual bool fetchQueries(bool block = false) = 0;
01297
01320 virtual bool raycast(
01321 const PxVec3& origin, const PxVec3& unitDir, const PxReal distance,
01322 PxRaycastCallback& hitCall, PxHitFlags hitFlags = PxHitFlags(PxHitFlag::eDEFAULT),
01323 const PxQueryFilterData& filterData = PxQueryFilterData(), PxQueryFilterCallback* filterCall = NULL,
01324 const PxQueryCache* cache = NULL) const = 0;
01325
01353 virtual bool sweep(const PxGeometry& geometry, const PxTransform& pose, const PxVec3& unitDir, const PxReal distance,
01354 PxSweepCallback& hitCall, PxHitFlags hitFlags = PxHitFlags(PxHitFlag::eDEFAULT),
01355 const PxQueryFilterData& filterData = PxQueryFilterData(), PxQueryFilterCallback* filterCall = NULL,
01356 const PxQueryCache* cache = NULL, const PxReal inflation = 0.f) const = 0;
01357
01358
01378 virtual bool overlap(const PxGeometry& geometry, const PxTransform& pose, PxOverlapCallback& hitCall,
01379 const PxQueryFilterData& filterData = PxQueryFilterData(), PxQueryFilterCallback* filterCall = NULL
01380 ) const = 0;
01381
01382
01389 virtual PxU32 getSceneQueryStaticTimestamp() const = 0;
01391
01392
01396
01402 virtual PxBroadPhaseType::Enum getBroadPhaseType() const = 0;
01403
01410 virtual bool getBroadPhaseCaps(PxBroadPhaseCaps& caps) const = 0;
01411
01417 virtual PxU32 getNbBroadPhaseRegions() const = 0;
01418
01427 virtual PxU32 getBroadPhaseRegions(PxBroadPhaseRegionInfo* userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
01428
01445 virtual PxU32 addBroadPhaseRegion(const PxBroadPhaseRegion& region, bool populateRegion=false) = 0;
01446
01460 virtual bool removeBroadPhaseRegion(PxU32 handle) = 0;
01461
01463
01464
01465
01469
01475 virtual PxTaskManager* getTaskManager() const = 0;
01476
01477
01496 virtual void lockRead(const char* file=NULL, PxU32 line=0) = 0;
01497
01503 virtual void unlockRead() = 0;
01504
01530 virtual void lockWrite(const char* file=NULL, PxU32 line=0) = 0;
01531
01537 virtual void unlockWrite() = 0;
01538
01539
01553 virtual void setNbContactDataBlocks(PxU32 numBlocks) = 0;
01554
01555
01565 virtual PxU32 getNbContactDataBlocksUsed() const = 0;
01566
01576 virtual PxU32 getMaxNbContactDataBlocksUsed() const = 0;
01577
01578
01584 virtual PxU32 getContactReportStreamBufferSize() const = 0;
01585
01586
01594 virtual void setSolverBatchSize(PxU32 solverBatchSize) = 0;
01595
01603 virtual PxU32 getSolverBatchSize() const = 0;
01604
01605
01607
01615 virtual PxReal getWakeCounterResetValue() const = 0;
01616
01633 virtual void shiftOrigin(const PxVec3& shift) = 0;
01634
01639 virtual PxPvdSceneClient* getScenePvdClient() = 0;
01640
01641 void* userData;
01642 };
01643
01644 #if !PX_DOXYGEN
01645 }
01646 #endif
01647
01649 #endif