- Timestamp:
- Apr 21, 2011, 6:58:23 PM (13 years ago)
- Location:
- code/branches/kicklib2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/kicklib2
- Property svn:mergeinfo changed
-
code/branches/kicklib2/src/external/bullet/BulletDynamics/Dynamics/btRigidBody.h
r5781 r8284 29 29 extern btScalar gDeactivationTime; 30 30 extern bool gDisableDeactivation; 31 32 #ifdef BT_USE_DOUBLE_PRECISION 33 #define btRigidBodyData btRigidBodyDoubleData 34 #define btRigidBodyDataName "btRigidBodyDoubleData" 35 #else 36 #define btRigidBodyData btRigidBodyFloatData 37 #define btRigidBodyDataName "btRigidBodyFloatData" 38 #endif //BT_USE_DOUBLE_PRECISION 39 40 41 enum btRigidBodyFlags 42 { 43 BT_DISABLE_WORLD_GRAVITY = 1 44 }; 31 45 32 46 … … 46 60 btVector3 m_angularVelocity; 47 61 btScalar m_inverseMass; 48 bt Scalar m_angularFactor;62 btVector3 m_linearFactor; 49 63 50 64 btVector3 m_gravity; … … 72 86 //keep track of typed constraints referencing this rigid body 73 87 btAlignedObjectArray<btTypedConstraint*> m_constraintRefs; 88 89 int m_rigidbodyFlags; 90 91 int m_debugBodyId; 92 93 94 protected: 95 96 ATTRIBUTE_ALIGNED64(btVector3 m_deltaLinearVelocity); 97 btVector3 m_deltaAngularVelocity; 98 btVector3 m_angularFactor; 99 btVector3 m_invMass; 100 btVector3 m_pushVelocity; 101 btVector3 m_turnVelocity; 102 74 103 75 104 public: … … 111 140 btScalar m_additionalAngularDampingFactor; 112 141 113 114 142 btRigidBodyConstructionInfo( btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0)): 115 143 m_mass(mass), … … 161 189 static const btRigidBody* upcast(const btCollisionObject* colObj) 162 190 { 163 if (colObj->getInternalType() ==btCollisionObject::CO_RIGID_BODY)191 if (colObj->getInternalType()&btCollisionObject::CO_RIGID_BODY) 164 192 return (const btRigidBody*)colObj; 165 193 return 0; … … 167 195 static btRigidBody* upcast(btCollisionObject* colObj) 168 196 { 169 if (colObj->getInternalType() ==btCollisionObject::CO_RIGID_BODY)197 if (colObj->getInternalType()&btCollisionObject::CO_RIGID_BODY) 170 198 return (btRigidBody*)colObj; 171 199 return 0; … … 220 248 void setMassProps(btScalar mass, const btVector3& inertia); 221 249 250 const btVector3& getLinearFactor() const 251 { 252 return m_linearFactor; 253 } 254 void setLinearFactor(const btVector3& linearFactor) 255 { 256 m_linearFactor = linearFactor; 257 m_invMass = m_linearFactor*m_inverseMass; 258 } 222 259 btScalar getInvMass() const { return m_inverseMass; } 223 260 const btMatrix3x3& getInvInertiaTensorWorld() const { … … 231 268 void applyCentralForce(const btVector3& force) 232 269 { 233 m_totalForce += force ;270 m_totalForce += force*m_linearFactor; 234 271 } 235 272 … … 262 299 void applyTorque(const btVector3& torque) 263 300 { 264 m_totalTorque += torque ;301 m_totalTorque += torque*m_angularFactor; 265 302 } 266 303 … … 268 305 { 269 306 applyCentralForce(force); 270 applyTorque(rel_pos.cross(force )*m_angularFactor);307 applyTorque(rel_pos.cross(force*m_linearFactor)); 271 308 } 272 309 273 310 void applyCentralImpulse(const btVector3& impulse) 274 311 { 275 m_linearVelocity += impulse * m_inverseMass;312 m_linearVelocity += impulse *m_linearFactor * m_inverseMass; 276 313 } 277 314 278 315 void applyTorqueImpulse(const btVector3& torque) 279 316 { 280 m_angularVelocity += m_invInertiaTensorWorld * torque ;317 m_angularVelocity += m_invInertiaTensorWorld * torque * m_angularFactor; 281 318 } 282 319 … … 288 325 if (m_angularFactor) 289 326 { 290 applyTorqueImpulse(rel_pos.cross(impulse )*m_angularFactor);327 applyTorqueImpulse(rel_pos.cross(impulse*m_linearFactor)); 291 328 } 292 329 } 293 330 } 294 331 295 //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position296 SIMD_FORCE_INLINE void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent,btScalar impulseMagnitude)297 {298 if (m_inverseMass != btScalar(0.))299 {300 m_linearVelocity += linearComponent*impulseMagnitude;301 if (m_angularFactor)302 {303 m_angularVelocity += angularComponent*impulseMagnitude*m_angularFactor;304 }305 }306 }307 308 332 void clearForces() 309 333 { … … 451 475 int m_frictionSolverType; 452 476 477 void setAngularFactor(const btVector3& angFac) 478 { 479 m_angularFactor = angFac; 480 } 481 453 482 void setAngularFactor(btScalar angFac) 454 483 { 455 m_angularFactor = angFac;456 } 457 btScalargetAngularFactor() const484 m_angularFactor.setValue(angFac,angFac,angFac); 485 } 486 const btVector3& getAngularFactor() const 458 487 { 459 488 return m_angularFactor; … … 481 510 } 482 511 483 int m_debugBodyId; 512 void setFlags(int flags) 513 { 514 m_rigidbodyFlags = flags; 515 } 516 517 int getFlags() const 518 { 519 return m_rigidbodyFlags; 520 } 521 522 const btVector3& getDeltaLinearVelocity() const 523 { 524 return m_deltaLinearVelocity; 525 } 526 527 const btVector3& getDeltaAngularVelocity() const 528 { 529 return m_deltaAngularVelocity; 530 } 531 532 const btVector3& getPushVelocity() const 533 { 534 return m_pushVelocity; 535 } 536 537 const btVector3& getTurnVelocity() const 538 { 539 return m_turnVelocity; 540 } 541 542 543 //////////////////////////////////////////////// 544 ///some internal methods, don't use them 545 546 btVector3& internalGetDeltaLinearVelocity() 547 { 548 return m_deltaLinearVelocity; 549 } 550 551 btVector3& internalGetDeltaAngularVelocity() 552 { 553 return m_deltaAngularVelocity; 554 } 555 556 const btVector3& internalGetAngularFactor() const 557 { 558 return m_angularFactor; 559 } 560 561 const btVector3& internalGetInvMass() const 562 { 563 return m_invMass; 564 } 565 566 btVector3& internalGetPushVelocity() 567 { 568 return m_pushVelocity; 569 } 570 571 btVector3& internalGetTurnVelocity() 572 { 573 return m_turnVelocity; 574 } 575 576 SIMD_FORCE_INLINE void internalGetVelocityInLocalPointObsolete(const btVector3& rel_pos, btVector3& velocity ) const 577 { 578 velocity = getLinearVelocity()+m_deltaLinearVelocity + (getAngularVelocity()+m_deltaAngularVelocity).cross(rel_pos); 579 } 580 581 SIMD_FORCE_INLINE void internalGetAngularVelocity(btVector3& angVel) const 582 { 583 angVel = getAngularVelocity()+m_deltaAngularVelocity; 584 } 585 586 587 //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position 588 SIMD_FORCE_INLINE void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent,const btScalar impulseMagnitude) 589 { 590 if (m_inverseMass) 591 { 592 m_deltaLinearVelocity += linearComponent*impulseMagnitude; 593 m_deltaAngularVelocity += angularComponent*(impulseMagnitude*m_angularFactor); 594 } 595 } 596 597 SIMD_FORCE_INLINE void internalApplyPushImpulse(const btVector3& linearComponent, const btVector3& angularComponent,btScalar impulseMagnitude) 598 { 599 if (m_inverseMass) 600 { 601 m_pushVelocity += linearComponent*impulseMagnitude; 602 m_turnVelocity += angularComponent*(impulseMagnitude*m_angularFactor); 603 } 604 } 605 606 void internalWritebackVelocity() 607 { 608 if (m_inverseMass) 609 { 610 setLinearVelocity(getLinearVelocity()+ m_deltaLinearVelocity); 611 setAngularVelocity(getAngularVelocity()+m_deltaAngularVelocity); 612 //m_deltaLinearVelocity.setZero(); 613 //m_deltaAngularVelocity .setZero(); 614 //m_originalBody->setCompanionId(-1); 615 } 616 } 617 618 619 void internalWritebackVelocity(btScalar timeStep); 620 621 622 /////////////////////////////////////////////// 623 624 virtual int calculateSerializeBufferSize() const; 625 626 ///fills the dataBuffer and returns the struct name (and 0 on failure) 627 virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const; 628 629 virtual void serializeSingleObject(class btSerializer* serializer) const; 630 484 631 }; 485 632 633 //@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData 634 ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 635 struct btRigidBodyFloatData 636 { 637 btCollisionObjectFloatData m_collisionObjectData; 638 btMatrix3x3FloatData m_invInertiaTensorWorld; 639 btVector3FloatData m_linearVelocity; 640 btVector3FloatData m_angularVelocity; 641 btVector3FloatData m_angularFactor; 642 btVector3FloatData m_linearFactor; 643 btVector3FloatData m_gravity; 644 btVector3FloatData m_gravity_acceleration; 645 btVector3FloatData m_invInertiaLocal; 646 btVector3FloatData m_totalForce; 647 btVector3FloatData m_totalTorque; 648 float m_inverseMass; 649 float m_linearDamping; 650 float m_angularDamping; 651 float m_additionalDampingFactor; 652 float m_additionalLinearDampingThresholdSqr; 653 float m_additionalAngularDampingThresholdSqr; 654 float m_additionalAngularDampingFactor; 655 float m_linearSleepingThreshold; 656 float m_angularSleepingThreshold; 657 int m_additionalDamping; 658 }; 659 660 ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 661 struct btRigidBodyDoubleData 662 { 663 btCollisionObjectDoubleData m_collisionObjectData; 664 btMatrix3x3DoubleData m_invInertiaTensorWorld; 665 btVector3DoubleData m_linearVelocity; 666 btVector3DoubleData m_angularVelocity; 667 btVector3DoubleData m_angularFactor; 668 btVector3DoubleData m_linearFactor; 669 btVector3DoubleData m_gravity; 670 btVector3DoubleData m_gravity_acceleration; 671 btVector3DoubleData m_invInertiaLocal; 672 btVector3DoubleData m_totalForce; 673 btVector3DoubleData m_totalTorque; 674 double m_inverseMass; 675 double m_linearDamping; 676 double m_angularDamping; 677 double m_additionalDampingFactor; 678 double m_additionalLinearDampingThresholdSqr; 679 double m_additionalAngularDampingThresholdSqr; 680 double m_additionalAngularDampingFactor; 681 double m_linearSleepingThreshold; 682 double m_angularSleepingThreshold; 683 int m_additionalDamping; 684 char m_padding[4]; 685 }; 686 486 687 487 688
Note: See TracChangeset
for help on using the changeset viewer.