PxRigidBody.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-2017 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_RIGIDBODY 00032 #define PX_PHYSICS_NX_RIGIDBODY 00033 00037 #include "PxRigidActor.h" 00038 #include "PxForceMode.h" 00039 00040 #if !PX_DOXYGEN 00041 namespace physx 00042 { 00043 #endif 00044 00045 00052 struct PxRigidBodyFlag 00053 { 00054 enum Enum 00055 { 00056 00078 eKINEMATIC = (1<<0), 00079 00089 eUSE_KINEMATIC_TARGET_FOR_SCENE_QUERIES = (1<<1), 00090 00101 eENABLE_CCD = (1<<2), 00102 00112 eENABLE_CCD_FRICTION = (1<<3), 00113 00124 eENABLE_POSE_INTEGRATION_PREVIEW = (1 << 4), 00125 00129 eENABLE_SPECULATIVE_CCD = (1 << 5), 00130 00134 eENABLE_CCD_MAX_CONTACT_IMPULSE = (1 << 6) 00135 }; 00136 }; 00137 00143 typedef PxFlags<PxRigidBodyFlag::Enum,PxU8> PxRigidBodyFlags; 00144 PX_FLAGS_OPERATORS(PxRigidBodyFlag::Enum,PxU8) 00145 00146 00152 class PxRigidBody : public PxRigidActor 00153 { 00154 public: 00155 // Runtime modifications 00156 00157 /************************************************************************************************/ 00175 virtual void setCMassLocalPose(const PxTransform& pose) = 0; 00176 00177 00185 virtual PxTransform getCMassLocalPose() const = 0; 00186 00187 00207 virtual void setMass(PxReal mass) = 0; 00208 00218 virtual PxReal getMass() const = 0; 00219 00227 virtual PxReal getInvMass() const = 0; 00228 00250 virtual void setMassSpaceInertiaTensor(const PxVec3& m) = 0; 00251 00263 virtual PxVec3 getMassSpaceInertiaTensor() const = 0; 00264 00276 virtual PxVec3 getMassSpaceInvInertiaTensor() const = 0; 00277 00278 00279 /************************************************************************************************/ 00291 virtual PxVec3 getLinearVelocity() const = 0; 00292 00312 virtual void setLinearVelocity(const PxVec3& linVel, bool autowake = true ) = 0; 00313 00314 00315 00323 virtual PxVec3 getAngularVelocity() const = 0; 00324 00325 00345 virtual void setAngularVelocity(const PxVec3& angVel, bool autowake = true ) = 0; 00346 00347 00348 /************************************************************************************************/ 00382 virtual void addForce(const PxVec3& force, PxForceMode::Enum mode = PxForceMode::eFORCE, bool autowake = true) = 0; 00383 00412 virtual void addTorque(const PxVec3& torque, PxForceMode::Enum mode = PxForceMode::eFORCE, bool autowake = true) = 0; 00413 00433 virtual void clearForce(PxForceMode::Enum mode = PxForceMode::eFORCE) = 0; 00434 00454 virtual void clearTorque(PxForceMode::Enum mode = PxForceMode::eFORCE) = 0; 00455 00471 virtual void setRigidBodyFlag(PxRigidBodyFlag::Enum flag, bool value) = 0; 00472 virtual void setRigidBodyFlags(PxRigidBodyFlags inFlags) = 0; 00473 00483 virtual PxRigidBodyFlags getRigidBodyFlags() const = 0; 00484 00506 virtual void setMinCCDAdvanceCoefficient(PxReal advanceCoefficient) = 0; 00507 00517 virtual PxReal getMinCCDAdvanceCoefficient() const = 0; 00518 00519 00525 virtual void setMaxDepenetrationVelocity(PxReal biasClamp) = 0; 00526 00532 virtual PxReal getMaxDepenetrationVelocity() const = 0; 00533 00534 00546 virtual void setMaxContactImpulse(PxReal maxImpulse) = 0; 00547 00555 virtual PxReal getMaxContactImpulse() const = 0; 00556 00557 00558 protected: 00559 PX_INLINE PxRigidBody(PxType concreteType, PxBaseFlags baseFlags) : PxRigidActor(concreteType, baseFlags) {} 00560 PX_INLINE PxRigidBody(PxBaseFlags baseFlags) : PxRigidActor(baseFlags) {} 00561 virtual ~PxRigidBody() {} 00562 virtual bool isKindOf(const char* name)const { return !::strcmp("PxRigidBody", name) || PxRigidActor::isKindOf(name); } 00563 }; 00564 00565 00566 #if !PX_DOXYGEN 00567 } // namespace physx 00568 #endif 00569 00571 #endif
Copyright © 2008-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com