There are some minor differences in the joint implementations. but there are some big internal differences
For example core 300 now handle resting contact and impulsive steps correctly
impulsive steps are used in continues collision steps.
Plus, I am not working on core 200 anymore, it would be too much work for me.
In any case core 300 now is more stable that core 200, plus I has more functionality.
I is no too difficult to migrate to core 300 and stay up to day, it make it simpler for every one.
In a few day I will make a newer 3DOF joint that will work with small angular approximation. depend on the results, if feel equal or better that the current 6DOF, I will replaces it, or keep the two
[quote="ronj"i just wanna point out that you are clamping the distance value in
http://code.google.com/p/newton-dynamic ... OF.cpp#176which means the linear limit will break and wont work as expected.[/quote]
can you tell me what line is this happening in the code?
Oh I see here
- Code: Select all
dFloat dist = dp % matrix1[i];
if (dist > m_maxLinearLimits[i]) {
// clamp the error, so the not too much energy is added when constraint violation occurs
if (dist > m_maxMaxLinearErrorRamp[i]) {
dist = m_maxMaxLinearErrorRamp[i];
}
dVector q1 (p1 + matrix1[i].Scale (m_maxLinearLimits[i] - dist));
NewtonUserJointAddLinearRow (m_joint, &p0[0], &q1[0], &matrix0[i][0]);
NewtonUserJointSetRowStiffness (m_joint, 1.0f);
// allow the object to return but not to kick going forward
NewtonUserJointSetRowMaximumFriction (m_joint, 0.0f);
} else if (dist < m_minLinearLimits[i]) {
// clamp the error, so the not too much energy is added when constraint violation occurs
if (dist < -m_maxMaxLinearErrorRamp[i]) {
dist = -m_maxMaxLinearErrorRamp[i];
}
dVector q1 (p1 + matrix1[i].Scale (m_minLinearLimits[i] - dist));
NewtonUserJointAddLinearRow (m_joint, &p0[0], &q1[0], &matrix0[i][0]);
NewtonUserJointSetRowStiffness (m_joint, 1.0f);
// allow the object to return but not to kick going forward
NewtonUserJointSetRowMinimumFriction (m_joint, 0.0f);
}
m_maxLinearLimits[i] is an array of switches that tell the joint witch of the three limit is linear degree of freedom is allow to move
m_maxMaxLinearErrorRamp[i] save the limit of that degree of freedom.
where is the error?
you say you commented that out, does that joint stops after you do that?