Changeset 8393 for code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
- Timestamp:
- May 3, 2011, 5:07:42 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
r8351 r8393 44 44 m_useReferenceFrameA(useReferenceFrameA), 45 45 m_flags(0) 46 #ifdef _BT_USE_CENTER_LIMIT_ 47 ,m_limit() 48 #endif 46 49 { 47 50 m_rbAFrame.getOrigin() = pivotInA; … … 76 79 rbAxisB1.getZ(),rbAxisB2.getZ(),axisInB.getZ() ); 77 80 81 #ifndef _BT_USE_CENTER_LIMIT_ 78 82 //start with free 79 83 m_lowerLimit = btScalar(1.0f); … … 83 87 m_limitSoftness = 0.9f; 84 88 m_solveLimit = false; 89 #endif 85 90 m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f); 86 91 } … … 94 99 m_useReferenceFrameA(useReferenceFrameA), 95 100 m_flags(0) 101 #ifdef _BT_USE_CENTER_LIMIT_ 102 ,m_limit() 103 #endif 96 104 { 97 105 … … 118 126 rbAxisB1.getZ(),rbAxisB2.getZ(),axisInB.getZ() ); 119 127 128 #ifndef _BT_USE_CENTER_LIMIT_ 120 129 //start with free 121 130 m_lowerLimit = btScalar(1.0f); … … 125 134 m_limitSoftness = 0.9f; 126 135 m_solveLimit = false; 136 #endif 127 137 m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f); 128 138 } … … 139 149 m_useReferenceFrameA(useReferenceFrameA), 140 150 m_flags(0) 141 { 151 #ifdef _BT_USE_CENTER_LIMIT_ 152 ,m_limit() 153 #endif 154 { 155 #ifndef _BT_USE_CENTER_LIMIT_ 142 156 //start with free 143 157 m_lowerLimit = btScalar(1.0f); … … 147 161 m_limitSoftness = 0.9f; 148 162 m_solveLimit = false; 163 #endif 149 164 m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f); 150 165 } … … 160 175 m_useReferenceFrameA(useReferenceFrameA), 161 176 m_flags(0) 177 #ifdef _BT_USE_CENTER_LIMIT_ 178 ,m_limit() 179 #endif 162 180 { 163 181 ///not providing rigidbody B means implicitly using worldspace for body B 164 182 165 183 m_rbBFrame.getOrigin() = m_rbA.getCenterOfMassTransform()(m_rbAFrame.getOrigin()); 166 184 #ifndef _BT_USE_CENTER_LIMIT_ 167 185 //start with free 168 186 m_lowerLimit = btScalar(1.0f); … … 172 190 m_limitSoftness = 0.9f; 173 191 m_solveLimit = false; 192 #endif 174 193 m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f); 175 194 } … … 450 469 if(getSolveLimit()) 451 470 { 452 limit_err = m_correction * m_referenceSign; 453 limit = (limit_err > btScalar(0.0)) ? 1 : 2; 471 #ifdef _BT_USE_CENTER_LIMIT_ 472 limit_err = m_limit.getCorrection() * m_referenceSign; 473 #else 474 limit_err = m_correction * m_referenceSign; 475 #endif 476 limit = (limit_err > btScalar(0.0)) ? 1 : 2; 477 454 478 } 455 479 // if the hinge has joint limits or motor, add in the extra row … … 515 539 } 516 540 // bounce (we'll use slider parameter abs(1.0 - m_dampingLimAng) for that) 541 #ifdef _BT_USE_CENTER_LIMIT_ 542 btScalar bounce = m_limit.getRelaxationFactor(); 543 #else 517 544 btScalar bounce = m_relaxationFactor; 545 #endif 518 546 if(bounce > btScalar(0.0)) 519 547 { … … 545 573 } 546 574 } 575 #ifdef _BT_USE_CENTER_LIMIT_ 576 info->m_constraintError[srow] *= m_limit.getBiasFactor(); 577 #else 547 578 info->m_constraintError[srow] *= m_biasFactor; 579 #endif 548 580 } // if(limit) 549 581 } // if angular limit or powered … … 551 583 552 584 553 554 585 void btHingeConstraint::setFrames(const btTransform & frameA, const btTransform & frameB) 586 { 587 m_rbAFrame = frameA; 588 m_rbBFrame = frameB; 589 buildJacobian(); 590 } 555 591 556 592 … … 578 614 579 615 580 #if 0581 void btHingeConstraint::testLimit()582 {583 // Compute limit information584 m_hingeAngle = getHingeAngle();585 m_correction = btScalar(0.);586 m_limitSign = btScalar(0.);587 m_solveLimit = false;588 if (m_lowerLimit <= m_upperLimit)589 {590 if (m_hingeAngle <= m_lowerLimit)591 {592 m_correction = (m_lowerLimit - m_hingeAngle);593 m_limitSign = 1.0f;594 m_solveLimit = true;595 }596 else if (m_hingeAngle >= m_upperLimit)597 {598 m_correction = m_upperLimit - m_hingeAngle;599 m_limitSign = -1.0f;600 m_solveLimit = true;601 }602 }603 return;604 }605 #else606 607 616 608 617 void btHingeConstraint::testLimit(const btTransform& transA,const btTransform& transB) … … 610 619 // Compute limit information 611 620 m_hingeAngle = getHingeAngle(transA,transB); 621 #ifdef _BT_USE_CENTER_LIMIT_ 622 m_limit.test(m_hingeAngle); 623 #else 612 624 m_correction = btScalar(0.); 613 625 m_limitSign = btScalar(0.); … … 629 641 } 630 642 } 643 #endif 631 644 return; 632 645 } 633 #endif 646 634 647 635 648 static btVector3 vHinge(0, 0, btScalar(1)); … … 662 675 void btHingeConstraint::setMotorTarget(btScalar targetAngle, btScalar dt) 663 676 { 677 #ifdef _BT_USE_CENTER_LIMIT_ 678 m_limit.fit(targetAngle); 679 #else 664 680 if (m_lowerLimit < m_upperLimit) 665 681 { … … 669 685 targetAngle = m_upperLimit; 670 686 } 671 687 #endif 672 688 // compute angular velocity 673 689 btScalar curAngle = getHingeAngle(m_rbA.getCenterOfMassTransform(),m_rbB.getCenterOfMassTransform()); … … 840 856 if(getSolveLimit()) 841 857 { 842 limit_err = m_correction * m_referenceSign; 843 limit = (limit_err > btScalar(0.0)) ? 1 : 2; 858 #ifdef _BT_USE_CENTER_LIMIT_ 859 limit_err = m_limit.getCorrection() * m_referenceSign; 860 #else 861 limit_err = m_correction * m_referenceSign; 862 #endif 863 limit = (limit_err > btScalar(0.0)) ? 1 : 2; 864 844 865 } 845 866 // if the hinge has joint limits or motor, add in the extra row … … 905 926 } 906 927 // bounce (we'll use slider parameter abs(1.0 - m_dampingLimAng) for that) 928 #ifdef _BT_USE_CENTER_LIMIT_ 929 btScalar bounce = m_limit.getRelaxationFactor(); 930 #else 907 931 btScalar bounce = m_relaxationFactor; 932 #endif 908 933 if(bounce > btScalar(0.0)) 909 934 { … … 935 960 } 936 961 } 962 #ifdef _BT_USE_CENTER_LIMIT_ 963 info->m_constraintError[srow] *= m_limit.getBiasFactor(); 964 #else 937 965 info->m_constraintError[srow] *= m_biasFactor; 966 #endif 938 967 } // if(limit) 939 968 } // if angular limit or powered
Note: See TracChangeset
for help on using the changeset viewer.