PxScene.h

Go to the documentation of this file.
00001 // This code contains NVIDIA Confidential Information and is disclosed to you
00002 // under a form of NVIDIA software license agreement provided separately to you.
00003 //
00004 // Notice
00005 // NVIDIA Corporation and its licensors retain all intellectual property and
00006 // proprietary rights in and to this software and related documentation and
00007 // any modifications thereto. Any use, reproduction, disclosure, or
00008 // distribution of this software and related documentation without an express
00009 // license agreement from NVIDIA Corporation is strictly prohibited.
00010 //
00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
00015 //
00016 // Information and code furnished is believed to be accurate and reliable.
00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
00018 // information or for any infringement of patents or other rights of third parties that may
00019 // result from its use. No license is granted by implication or otherwise under any patent
00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice.
00021 // This code supersedes and replaces all information previously supplied.
00022 // NVIDIA Corporation products are not authorized for use as critical
00023 // components in life support devices or systems without express written approval of
00024 // NVIDIA Corporation.
00025 //
00026 // Copyright (c) 2008-2018 NVIDIA Corporation. All rights reserved.
00027 // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
00028 // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.  
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 } // namespace physx
01646 #endif
01647 
01649 #endif


Copyright © 2008-2018 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com