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 };
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
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 }
00568 #endif
00569
00571 #endif