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 };
00131 };
00132
00138 typedef PxFlags<PxRigidBodyFlag::Enum,PxU8> PxRigidBodyFlags;
00139 PX_FLAGS_OPERATORS(PxRigidBodyFlag::Enum,PxU8)
00140
00141
00147 class PxRigidBody : public PxRigidActor
00148 {
00149 public:
00150
00151
00152
00170 virtual void setCMassLocalPose(const PxTransform& pose) = 0;
00171
00172
00180 virtual PxTransform getCMassLocalPose() const = 0;
00181
00182
00202 virtual void setMass(PxReal mass) = 0;
00203
00213 virtual PxReal getMass() const = 0;
00214
00222 virtual PxReal getInvMass() const = 0;
00223
00245 virtual void setMassSpaceInertiaTensor(const PxVec3& m) = 0;
00246
00258 virtual PxVec3 getMassSpaceInertiaTensor() const = 0;
00259
00271 virtual PxVec3 getMassSpaceInvInertiaTensor() const = 0;
00272
00273
00274
00286 virtual PxVec3 getLinearVelocity() const = 0;
00287
00307 virtual void setLinearVelocity(const PxVec3& linVel, bool autowake = true ) = 0;
00308
00309
00310
00318 virtual PxVec3 getAngularVelocity() const = 0;
00319
00320
00340 virtual void setAngularVelocity(const PxVec3& angVel, bool autowake = true ) = 0;
00341
00342
00343
00377 virtual void addForce(const PxVec3& force, PxForceMode::Enum mode = PxForceMode::eFORCE, bool autowake = true) = 0;
00378
00407 virtual void addTorque(const PxVec3& torque, PxForceMode::Enum mode = PxForceMode::eFORCE, bool autowake = true) = 0;
00408
00428 virtual void clearForce(PxForceMode::Enum mode = PxForceMode::eFORCE) = 0;
00429
00449 virtual void clearTorque(PxForceMode::Enum mode = PxForceMode::eFORCE) = 0;
00450
00466 virtual void setRigidBodyFlag(PxRigidBodyFlag::Enum flag, bool value) = 0;
00467 virtual void setRigidBodyFlags(PxRigidBodyFlags inFlags) = 0;
00468
00478 virtual PxRigidBodyFlags getRigidBodyFlags() const = 0;
00479
00501 virtual void setMinCCDAdvanceCoefficient(PxReal advanceCoefficient) = 0;
00502
00512 virtual PxReal getMinCCDAdvanceCoefficient() const = 0;
00513
00514
00520 virtual void setMaxDepenetrationVelocity(PxReal biasClamp) = 0;
00521
00527 virtual PxReal getMaxDepenetrationVelocity() const = 0;
00528
00529
00539 virtual void setMaxContactImpulse(PxReal maxImpulse) = 0;
00540
00548 virtual PxReal getMaxContactImpulse() const = 0;
00549
00550
00551 protected:
00552 PX_INLINE PxRigidBody(PxType concreteType, PxBaseFlags baseFlags) : PxRigidActor(concreteType, baseFlags) {}
00553 PX_INLINE PxRigidBody(PxBaseFlags baseFlags) : PxRigidActor(baseFlags) {}
00554 virtual ~PxRigidBody() {}
00555 virtual bool isKindOf(const char* name)const { return !::strcmp("PxRigidBody", name) || PxRigidActor::isKindOf(name); }
00556 };
00557
00558
00559 #if !PX_DOXYGEN
00560 }
00561 #endif
00562
00564 #endif