30 #define D6_USE_OBSOLETE_METHOD false
31 #define D6_USE_FRAME_OFFSET true
40 , m_frameInA(frameInA)
41 , m_frameInB(frameInB),
42 m_useLinearReferenceFrameA(useLinearReferenceFrameA),
55 m_useLinearReferenceFrameA(useLinearReferenceFrameB),
58 m_useSolveConstraintObsolete(false)
68 #define GENERIC_D6_DISABLE_WARMSTARTING 1
173 maxMotorForce *= timeStep;
181 vel_diff = angVelA-angVelB;
191 if ( motor_relvel < SIMD_EPSILON && motor_relvel > -
SIMD_EPSILON )
204 if (unclippedMotorImpulse>0.0f)
206 clippedMotorImpulse = unclippedMotorImpulse > maxMotorForce? maxMotorForce: unclippedMotorImpulse;
210 clippedMotorImpulse = unclippedMotorImpulse < -maxMotorForce ? -maxMotorForce: unclippedMotorImpulse;
219 btScalar sum = oldaccumImpulse + clippedMotorImpulse;
224 btVector3 motorImp = clippedMotorImpulse * axis;
229 return clippedMotorImpulse;
246 if(loLimit > hiLimit)
253 if (test_value < loLimit)
259 else if (test_value> hiLimit)
300 btScalar depth = -(pointInA - pointInB).
dot(axis_normal_on_a);
308 if (minLimit < maxLimit)
311 if (depth > maxLimit)
319 if (depth < minLimit)
342 btVector3 impulse_vector = axis_normal_on_a * normalImpulse;
348 return normalImpulse;
467 for(i = 0; i < 3; i++)
497 pivotAInW,pivotBInW);
508 normalWorld = this->
getAxis(i);
534 for(i = 0; i < 3; i++)
582 int row =
setAngularLimits(info, 0,transA,transB,linVelA,linVelB,angVelA,angVelB);
583 setLinearLimits(info, row, transA,transB,linVelA,linVelB,angVelA,angVelB);
587 int row =
setLinearLimits(info, 0, transA,transB,linVelA,linVelB,angVelA,angVelB);
609 int row =
setAngularLimits(info, 0,transA,transB,linVelA,linVelB,angVelA,angVelB);
610 setLinearLimits(info, row, transA,transB,linVelA,linVelB,angVelA,angVelB);
614 int row =
setLinearLimits(info, 0, transA,transB,linVelA,linVelB,angVelA,angVelB);
626 for (
int i=0;i<3 ;i++ )
649 int indx1 = (i + 1) % 3;
650 int indx2 = (i + 2) % 3;
656 row +=
get_limit_motor_info2(&limot, transA,transB,linVelA,linVelB,angVelA,angVelB, info, row, axis, 0, rotAllowed);
660 row +=
get_limit_motor_info2(&limot, transA,transB,linVelA,linVelB,angVelA,angVelB, info, row, axis, 0);
672 int row = row_offset;
674 for (
int i=0;i<3 ;i++ )
693 transA,transB,linVelA,linVelB,angVelA,angVelB, info,row,axis,1);
750 weight = imA / (imA + imB);
764 for(
int i = 0; i < 3; i++)
778 int srow = row * info->
rowskip;
781 if (powered || limit)
790 J2[srow+0] = -ax1[0];
791 J2[srow+1] = -ax1[1];
792 J2[srow+2] = -ax1[2];
812 btVector3 totalDist = projA + ax1 * desiredOffs - projB;
814 relA = orthoA + totalDist *
m_factA;
815 relB = orthoB - totalDist *
m_factB;
816 tmpA = relA.
cross(ax1);
817 tmpB = relB.
cross(ax1);
899 vel = angVelA.
dot(ax1);
902 vel -= angVelB.
dot(ax1);
906 vel = linVelA.
dot(ax1);
909 vel -= linVelB.
dot(ax1);
927 if (newc < info->m_constraintError[srow])
948 if((axis >= 0) && (axis < 3))
968 else if((axis >=3) && (axis < 6))
998 if((axis >= 0) && (axis < 3))
1018 else if((axis >=3) && (axis < 6))
1056 xAxis[1], yAxis[1], zAxis[1],
1057 xAxis[2], yAxis[2], zAxis[2]);