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