[ODE] amotor bugfix
Rodrigo Hernandez
kwizatz at aeongames.com
Sat Oct 22 22:09:10 MST 2005
It's fixed on UNSTABLE branch, it was probably fixed there, but not on HEAD.
Geoff Carlton wrote:
> Actually, the bug has been found before, on 30/9/04. The result of
> the discussion was apparently the patch file committed into cvs, so
> I'm not sure why the bug is still there now, a year later.
>
> [ODE] bug in amotorComputeGlobalAxes:
>
> @@ -2301,20 +2301,20 @@
> // relative to b1
> dMULTIPLY0_331 (ax[i],joint->node[0].body->R,joint->axis[i]);
> }
> - if (joint->rel[i] == 2) {
> + else if (joint->rel[i] == 2) {
> // relative to b2
> if (joint->node[1].body) { // jds: don't assert, just ignore
> dMULTIPLY0_331 (ax[i],joint->node[1].body->R,joint->axis[i]);
>
>
>
> Nagymáthé Dénes wrote:
>
>> Hi,
>>
>> I've just realized a bug in amotor; it might be responsible for
>> confusion of many people recently:
>> In amotorComputeGlobalAxes(), when mode is dAMotorUser (the else
>> case), there's an else statement missing, causing the use of _global_
>> axis if the axis is set relative to b1!
>> The code looks like this:
>>
>> if (joint->rel[i] == 1) {
>> // relative to b1
>> dMULTIPLY0_331 (ax[i],joint->node[0].body->R,joint->axis[i]);
>> } else <----THIS WAS MISSING **********
>> if (joint->rel[i] == 2) {
>> // relative to b2
>> dIASSERT(joint->node[1].body);
>> dMULTIPLY0_331 (ax[i],joint->node[1].body->R,joint->axis[i]);
>> }
>> else {
>> // global - just copy it
>> ax[i][0] = joint->axis[i][0];
>> ax[i][1] = joint->axis[i][1];
>> ax[i][2] = joint->axis[i][2];
>> }
>> I can't believe no one has realized it before. :o)
>>
>> Denes
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> ODE mailing list
>> ODE at q12.org
>> http://q12.org/mailman/listinfo/ode
>>
>>
> _______________________________________________
> ODE mailing list
> ODE at q12.org
> http://q12.org/mailman/listinfo/ode
>
More information about the ODE
mailing list