PhysX SDK 3.2 API Reference: PxScene.h Source File

PhysX SDK 3.2 API

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-2012 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 "PxSceneQueryReport.h"
00041 #include "PxSceneQueryFiltering.h"
00042 #include "PxClient.h"
00043 
00044 #if PX_USE_PARTICLE_SYSTEM_API
00045 #include "particles/PxParticleSystem.h"
00046 #include "particles/PxParticleFluid.h"
00047 #endif
00048 
00049 #ifndef PX_DOXYGEN
00050 namespace physx
00051 {
00052 #endif
00053 
00054 class PxRigidStatic;
00055 class PxRigidDynamic;
00056 class PxConstraint;
00057 class PxMaterial;
00058 class PxSimulationEventCallback;
00059 class PxPhysics;
00060 class PxBatchQueryDesc;
00061 class PxBatchQuery;
00062 class PxSweepCache;
00063 class PxAggregate;
00064 class PxRenderBuffer;
00065 
00066 class PxSphereGeometry;
00067 class PxBoxGeometry;
00068 class PxCapsuleGeometry;
00069 
00070 typedef PxU8 PxDominanceGroup;
00071 
00072 namespace pxtask
00073 {
00074     class BaseTask;
00075     class TaskManager;
00076 }
00077 
00084 #define PX_MAX_SWEEP_DISTANCE 1e8f
00085 
00091 struct PxActiveTransform
00092 {
00093     PxActor*        actor;              
00094     void*           userData;           
00095     PxTransform     actor2World;        
00096 };
00097 
00106 struct PxConstraintDominance
00107 {
00108     PxConstraintDominance(PxReal a, PxReal b) 
00109         : dominance0(a), dominance1(b) {}
00110     PxReal dominance0;
00111     PxReal dominance1;
00112 };
00113 
00121 struct PxActorTypeSelectionFlag
00122 {
00123     enum Enum
00124     {
00129         eRIGID_STATIC       = (1 << 0),
00130 
00135         eRIGID_DYNAMIC      = (1 << 1),
00136 
00137 #if PX_USE_PARTICLE_SYSTEM_API
00138 
00142         ePARTICLE_SYSTEM    = (1 << 2),
00143 
00148         ePARTICLE_FLUID     = (1 << 3),
00149 #endif
00150 
00151 #if PX_USE_CLOTH_API
00152 
00156         eCLOTH              = (1 << 5)
00157 #endif
00158     };
00159 };
00160 
00166 typedef PxFlags<PxActorTypeSelectionFlag::Enum,PxU16> PxActorTypeSelectionFlags;
00167 PX_FLAGS_OPERATORS(PxActorTypeSelectionFlag::Enum,PxU16);
00168 
00182 struct PxSceneQueryCache
00183 {
00187     PX_INLINE PxSceneQueryCache() : shape(NULL), faceIndex(0xffffffff) {}
00188 
00192     PX_INLINE PxSceneQueryCache(PxShape* s, PxU32 findex) : shape(s), faceIndex(findex) {}
00193 
00194     PxShape*    shape;          
00195     PxU32       faceIndex;      
00196 };
00197 
00207 class PxScene
00208 {
00209     protected:
00210                                         PxScene(): userData(0)  {}
00211     virtual                             ~PxScene()  {}
00212 
00213     public:
00214 
00215 /************************************************************************************************/
00216     
00220     
00232     virtual     void                    release() = 0;
00233 
00234 
00243     virtual     bool                    saveToDesc(PxSceneDesc& desc)   const   = 0;
00244 
00255     virtual     void                    setFlag(PxSceneFlag::Enum flag, bool value) = 0;
00256 
00264     virtual     PxSceneFlags            getFlags() const = 0;
00265 
00275     virtual void                        setGravity(const PxVec3& vec) = 0;
00276 
00284     virtual PxVec3                      getGravity() const = 0;
00285     
00293     virtual PxPhysics&                  getPhysics() = 0;
00294 
00300     virtual PxU32                       getTimestamp()  const   = 0;
00301 
00308     virtual PxU32                       getSceneQueryStaticTimestamp()  const   = 0;
00309 
00310     void*   userData;   
00311 
00313 
00314 /************************************************************************************************/
00315 
00319 
00351     virtual void                        simulate(PxReal elapsedTime, 
00352                                                  physx::pxtask::BaseTask* completionTask = NULL,
00353                                                  void* scratchMemBlock = 0,
00354                                                  PxU32 scratchMemBlockSize = 0,
00355                                                  bool controlSimulation = true)     = 0;
00356     
00368     virtual bool                        checkResults(bool block = false)    = 0;
00369 
00391     virtual bool                        fetchResults(bool block = false, PxU32* errorState = 0) = 0;
00392 
00403     virtual void                        flush(bool sendPendingReports = false) = 0; 
00404     
00406 
00407 /************************************************************************************************/
00408 
00412     
00418     virtual physx::pxtask::TaskManager*     getTaskManager() const = 0;
00419 
00420     
00434     virtual void                        setSolverBatchSize(PxU32 solverBatchSize) = 0;
00435 
00449     virtual PxU32                       getSolverBatchSize() const = 0;
00450     
00451     
00465     virtual         void                setNbContactDataBlocks(PxU32 numBlocks) = 0;
00466     
00467 
00477     virtual         PxU32               getNbContactDataBlocksUsed() const = 0;
00478 
00488     virtual         PxU32               getMaxNbContactDataBlocksUsed() const = 0;
00489 
00490 
00492 
00493 /************************************************************************************************/
00494 
00507     virtual void                        addArticulation(PxArticulation& articulation) = 0;
00508 
00518     virtual void                        removeArticulation(PxArticulation& articulation) = 0;
00519 
00534     virtual void                        addActor(PxActor& actor) = 0;
00535 
00536     // PT: work in progress. Don't use yet.
00537     virtual void                        addActors(PxU32 nbActors, PxActor** actors) = 0;
00538 
00552     virtual void                        removeActor(PxActor& actor) = 0;
00553 
00554 
00555 // PX_AGGREGATE
00567     virtual void                        addAggregate(PxAggregate& aggregate)    = 0;
00568 
00580     virtual void                        removeAggregate(PxAggregate& aggregate) = 0;
00581 
00589     virtual         PxU32               getNbAggregates()   const   = 0;
00590 
00601     virtual         PxU32               getAggregates(PxAggregate** userBuffer, PxU32 bufferSize, PxU32 startIndex=0)   const   = 0;
00602 //~PX_AGGREGATE
00603 
00605 /************************************************************************************************/
00606 
00610 
00662     virtual void                        setDominanceGroupPair(PxDominanceGroup group1, PxDominanceGroup group2, const PxConstraintDominance& dominance) = 0;
00663 
00669     virtual PxConstraintDominance       getDominanceGroupPair(PxDominanceGroup group1, PxDominanceGroup group2) const = 0;
00670 
00672 /************************************************************************************************/
00673 
00677 
00686     virtual PxU32                       getNbActors(PxActorTypeSelectionFlags types) const = 0;
00687 
00699     virtual PxU32                       getActors(PxActorTypeSelectionFlags types, PxActor** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const    = 0;
00700 
00718     virtual PxActiveTransform*          getActiveTransforms(PxU32& nbTransformsOut, PxClientID client = PX_DEFAULT_CLIENT) = 0;
00719 
00727     virtual PxU32                       getNbArticulations() const = 0;
00728 
00739     virtual PxU32                       getArticulations(PxArticulation** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00740 
00748     virtual PxU32                       getNbConstraints()  const   = 0;
00749 
00760     virtual PxU32                       getConstraints(PxConstraint** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
00761 
00762 
00764 /************************************************************************************************/
00765 
00776     virtual PxClientID                  createClient() = 0;
00777 
00793     virtual void                        setClientBehaviorBits(PxClientID client, PxU32 clientBehaviorBits) = 0; 
00794 
00800     virtual PxU32                       getClientBehaviorBits(PxClientID client) const = 0;
00802 /************************************************************************************************/
00803 
00807 
00824     virtual void                        setSimulationEventCallback(PxSimulationEventCallback* callback, PxClientID client = PX_DEFAULT_CLIENT) = 0;
00825 
00834     virtual PxSimulationEventCallback*  getSimulationEventCallback(PxClientID client = PX_DEFAULT_CLIENT) const = 0;
00835 
00843     virtual void                        setContactModifyCallback(PxContactModifyCallback* callback) = 0;
00844 
00852     virtual PxContactModifyCallback*    getContactModifyCallback() const = 0;
00853 
00855 /************************************************************************************************/
00856 
00860 
00870     virtual const void*                 getFilterShaderData() const = 0;
00871 
00879     virtual PxU32                       getFilterShaderDataSize() const = 0;
00880 
00888     virtual PxSimulationFilterShader    getFilterShader() const = 0;
00889 
00897     virtual PxSimulationFilterCallback* getFilterCallback() const = 0;
00898 
00900 
00901 /************************************************************************************************/
00902 
00906 
00907 
00917     virtual PxBatchQuery*               createBatchQuery(const PxBatchQueryDesc& desc) = 0;
00918 
00926     PX_DEPRECATED   virtual PxSweepCache*               createSweepCache(PxReal dimensions = 5.0f) = 0;
00927 
00935     virtual void                        setDynamicTreeRebuildRateHint(PxU32 dynamicTreeRebuildRateHint) = 0;
00936 
00944     virtual PxU32                       getDynamicTreeRebuildRateHint() const = 0;
00945 
00946 
00967     virtual bool raycastAny(const PxVec3& origin, const PxVec3& unitDir, const PxReal distance,
00968                             PxSceneQueryHit& hit,
00969                             const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
00970                             PxSceneQueryFilterCallback* filterCall = NULL,
00971                             const PxSceneQueryCache* cache = NULL,
00972                             PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
00973 
00995     virtual bool raycastSingle(const PxVec3& origin, const PxVec3& unitDir, const PxReal distance,
00996                                PxSceneQueryFlags outputFlags,
00997                                PxRaycastHit& hit,
00998                                const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
00999                                PxSceneQueryFilterCallback* filterCall = NULL,
01000                                const PxSceneQueryCache* cache = NULL,
01001                                PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01002 
01029     virtual PxI32 raycastMultiple(const PxVec3& origin, const PxVec3& unitDir, const PxReal distance,
01030                                   PxSceneQueryFlags outputFlags,
01031                                   PxRaycastHit* hitBuffer,
01032                                   PxU32 hitBufferSize,
01033                                   bool& blockingHit,
01034                                   const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
01035                                   PxSceneQueryFilterCallback* filterCall = NULL,
01036                                   const PxSceneQueryCache* cache = NULL,
01037                                   PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01038     
01061     virtual bool sweepAny(  const PxGeometry& geometry, const PxTransform& pose, const PxVec3& unitDir, const PxReal distance,
01062                             PxSceneQueryFlags queryFlags,
01063                             PxSceneQueryHit& hit,
01064                             const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
01065                             PxSceneQueryFilterCallback* filterCall = NULL,
01066                             const PxSceneQueryCache* cache = NULL,
01067                             PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01068 
01093     virtual bool sweepAny(  const PxGeometry** geometryList, const PxTransform* poseList, const PxFilterData* filterDataList, PxU32 geometryCount, 
01094                             const PxVec3& unitDir, const PxReal distance,
01095                             PxSceneQueryFlags queryFlags,
01096                             PxSceneQueryHit& hit,
01097                             PxSceneQueryFilterFlags filterFlags = PxSceneQueryFilterFlag::eDYNAMIC | PxSceneQueryFilterFlag::eSTATIC,
01098                             PxSceneQueryFilterCallback* filterCall = NULL,
01099                             const PxSceneQueryCache* cache = NULL,
01100                             PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01101 
01124     virtual bool sweepSingle(   const PxGeometry& geometry, const PxTransform& pose, const PxVec3& unitDir, const PxReal distance,
01125                                 PxSceneQueryFlags outputFlags,
01126                                 PxSweepHit& hit,
01127                                 const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
01128                                 PxSceneQueryFilterCallback* filterCall = NULL,
01129                                 const PxSceneQueryCache* cache = NULL,
01130                                 PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01131 
01157     virtual bool sweepSingle(   const PxGeometry** geometryList, const PxTransform* poseList, const PxFilterData* filterDataList, PxU32 geometryCount, 
01158                                 const PxVec3& unitDir, const PxReal distance,
01159                                 PxSceneQueryFlags outputFlags,
01160                                 PxSweepHit& hit,
01161                                 PxSceneQueryFilterFlags filterFlags = PxSceneQueryFilterFlag::eDYNAMIC | PxSceneQueryFilterFlag::eSTATIC,
01162                                 PxSceneQueryFilterCallback* filterCall = NULL,
01163                                 const PxSceneQueryCache* cache = NULL,
01164                                 PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01165 
01193     virtual PxI32 sweepMultiple(    const PxGeometry& geometry, const PxTransform& pose, const PxVec3& unitDir, const PxReal distance,
01194                                     PxSceneQueryFlags outputFlags,
01195                                     PxSweepHit* hitBuffer,
01196                                     PxU32 hitBufferSize,
01197                                     bool& blockingHit,
01198                                     const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
01199                                     PxSceneQueryFilterCallback* filterCall = NULL,
01200                                     const PxSceneQueryCache* cache = NULL,
01201                                     PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01202 
01233     virtual PxI32 sweepMultiple(const PxGeometry** geometryList, const PxTransform* poseList, const PxFilterData* filterDataList, PxU32 geometryCount, 
01234                                 const PxVec3& unitDir, const PxReal distance,
01235                                 PxSceneQueryFlags outputFlags,
01236                                 PxSweepHit* hitBuffer,
01237                                 PxU32 hitBufferSize,
01238                                 bool& blockingHit,
01239                                 PxSceneQueryFilterFlags filterFlags = PxSceneQueryFilterFlag::eDYNAMIC | PxSceneQueryFilterFlag::eSTATIC,
01240                                 PxSceneQueryFilterCallback* filterCall = NULL,
01241                                 const PxSceneQueryCache* cache = NULL,
01242                                 PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01243 
01244 
01263     virtual PxI32 overlapMultiple(  const PxGeometry& geometry,
01264                                     const PxTransform& pose,
01265                                     PxShape** hitBuffer,
01266                                     PxU32 hitBufferSize,
01267                                     const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
01268                                     PxSceneQueryFilterCallback* filterCall = NULL,
01269                                     PxClientID queryClient = PX_DEFAULT_CLIENT) const = 0;
01270 
01288     PX_INLINE bool overlapAny(const PxGeometry& geometry,
01289                             const PxTransform& pose,
01290                             PxShape*& hit,
01291                             const PxSceneQueryFilterData& filterData = PxSceneQueryFilterData(),
01292                             PxSceneQueryFilterCallback* filterCall = NULL,
01293                             PxClientID queryClient = PX_DEFAULT_CLIENT) const
01294     {
01295         return overlapMultiple(geometry, pose, &hit, 1, filterData, filterCall, queryClient) != 0 ? true : false;
01296     }
01297 
01299 
01300 /************************************************************************************************/
01301 
01305     
01317     virtual bool setVisualizationParameter(PxVisualizationParameter::Enum param, PxReal value) = 0;
01318 
01327     virtual PxReal getVisualizationParameter(PxVisualizationParameter::Enum paramEnum) const = 0;
01328 
01329 
01330     virtual void setVisualizationCullingBox(const PxBounds3& box) = 0;
01331     virtual const PxBounds3& getVisualizationCullingBox() const = 0;
01332 
01344     virtual const PxRenderBuffer&   getRenderBuffer() = 0;
01345 
01346     
01356     virtual void                    getSimulationStatistics(PxSimulationStatistics& stats) const = 0;
01357 
01359     
01360 };
01361 
01362 #ifndef PX_DOXYGEN
01363 } // namespace physx
01364 #endif
01365 
01367 #endif


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