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-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_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 
00139         eRETAIN_ACCELERATIONS = (1<<7)
00140     };
00141 };
00142 
00148 typedef PxFlags<PxRigidBodyFlag::Enum,PxU8> PxRigidBodyFlags;
00149 PX_FLAGS_OPERATORS(PxRigidBodyFlag::Enum,PxU8)
00150 
00151 
00157 class PxRigidBody : public PxRigidActor
00158 {
00159 public:
00160     // Runtime modifications
00161 
00162 /************************************************************************************************/
00180     virtual     void            setCMassLocalPose(const PxTransform& pose) = 0;
00181 
00182 
00190     virtual     PxTransform     getCMassLocalPose() const = 0;
00191 
00192 
00212     virtual     void            setMass(PxReal mass) = 0;
00213 
00223     virtual     PxReal          getMass() const = 0;
00224 
00232     virtual     PxReal          getInvMass() const = 0;
00233 
00255     virtual     void            setMassSpaceInertiaTensor(const PxVec3& m) = 0;
00256 
00268     virtual     PxVec3          getMassSpaceInertiaTensor()         const = 0;
00269 
00281     virtual     PxVec3          getMassSpaceInvInertiaTensor()          const = 0;
00282 
00283     /************************************************************************************************/
00298     virtual     void                setLinearDamping(PxReal linDamp) = 0;
00299 
00307     virtual     PxReal              getLinearDamping() const = 0;
00308 
00322     virtual     void                setAngularDamping(PxReal angDamp) = 0;
00323 
00331     virtual     PxReal              getAngularDamping() const = 0;
00332 
00333 
00334 /************************************************************************************************/
00346     virtual     PxVec3          getLinearVelocity()     const = 0;
00347 
00367     virtual     void            setLinearVelocity(const PxVec3& linVel, bool autowake = true ) = 0;
00368 
00369 
00370 
00378     virtual     PxVec3          getAngularVelocity()    const = 0;
00379 
00380 
00400     virtual     void            setAngularVelocity(const PxVec3& angVel, bool autowake = true ) = 0;
00401 
00420     virtual     void                setMaxAngularVelocity(PxReal maxAngVel) = 0;
00421 
00429     virtual     PxReal              getMaxAngularVelocity() const = 0;
00430 
00431 
00447     virtual     void                setMaxLinearVelocity(PxReal maxLinVel) = 0;
00448 
00456     virtual     PxReal              getMaxLinearVelocity()  const = 0;
00457 
00458 
00459 /************************************************************************************************/
00493     virtual     void            addForce(const PxVec3& force, PxForceMode::Enum mode = PxForceMode::eFORCE, bool autowake = true) = 0;
00494 
00523     virtual     void            addTorque(const PxVec3& torque, PxForceMode::Enum mode = PxForceMode::eFORCE, bool autowake = true) = 0;
00524 
00544     virtual     void            clearForce(PxForceMode::Enum mode = PxForceMode::eFORCE) = 0;
00545 
00565     virtual     void            clearTorque(PxForceMode::Enum mode = PxForceMode::eFORCE) = 0;
00566 
00567 
00579     virtual     void            setForceAndTorque(const PxVec3& force, const PxVec3& torque, PxForceMode::Enum mode = PxForceMode::eFORCE) = 0;
00580 
00596     virtual     void                setRigidBodyFlag(PxRigidBodyFlag::Enum flag, bool value) = 0;
00597     virtual     void                setRigidBodyFlags(PxRigidBodyFlags inFlags) = 0;
00598 
00608     virtual     PxRigidBodyFlags    getRigidBodyFlags() const = 0;
00609 
00631     virtual void setMinCCDAdvanceCoefficient(PxReal advanceCoefficient) = 0;
00632 
00642     virtual PxReal getMinCCDAdvanceCoefficient() const = 0;
00643 
00644 
00650     virtual void setMaxDepenetrationVelocity(PxReal biasClamp) = 0;
00651 
00657     virtual PxReal getMaxDepenetrationVelocity() const = 0;
00658 
00659 
00669     virtual void setMaxContactImpulse(PxReal maxImpulse) = 0;
00670 
00678     virtual PxReal getMaxContactImpulse() const = 0;
00679 
00685     virtual PxU32 getInternalIslandNodeIndex() const = 0;
00686 
00687 
00688 protected:
00689     PX_INLINE                   PxRigidBody(PxType concreteType, PxBaseFlags baseFlags) : PxRigidActor(concreteType, baseFlags) {}
00690     PX_INLINE                   PxRigidBody(PxBaseFlags baseFlags) : PxRigidActor(baseFlags) {}
00691     virtual                     ~PxRigidBody()  {}
00692     virtual     bool            isKindOf(const char* name)const {   return !::strcmp("PxRigidBody", name) || PxRigidActor::isKindOf(name); }
00693 };
00694 
00695 
00696 #if !PX_DOXYGEN
00697 } // namespace physx
00698 #endif
00699 
00701 #endif


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