00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
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
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 }
00698 #endif
00699
00701 #endif