matheng10
Senior Newbie 
Java games rock!
|
 |
«
Posted
2004-04-25 18:12:05 » |
|
Hi i found that i got inconsistent reading from Geom.getRotation it seems that ODE continuosly move matrix structures around so we need an updateReference before every read. (I think we also need to call updateReference also before getPosition while getQuaternion always copy the correct ode quaternion) I don't know if this is correct ODE behaviour or is caused by some other bug. I also found that indices for both body.setRotation and geom.setRotation were wrong and different from the ones from getRotation (as ODE uses always vectors of 4 element even if it needs only 3) so here's my cumulative patch for both of this bug. Index: Geom.java =================================================================== RCS file: /cvs/odejava/odejava/src/org/odejava/Geom.java,v retrieving revision 1.4 diff -r1.4 Geom.java 136,141c136,141 < Ode.floatArray_setitem(tmpArray, 3, r.getElement(1, 0)); < Ode.floatArray_setitem(tmpArray, 4, r.getElement(1, 1)); < Ode.floatArray_setitem(tmpArray, 5, r.getElement(1, 2)); < Ode.floatArray_setitem(tmpArray, 6, r.getElement(2, 0)); < Ode.floatArray_setitem(tmpArray, 7, r.getElement(2, 1)); < Ode.floatArray_setitem(tmpArray, 8, r.getElement(2, 2)); --- > Ode.floatArray_setitem(tmpArray, 4, r.getElement(1, 0)); > Ode.floatArray_setitem(tmpArray, 5, r.getElement(1, 1)); > Ode.floatArray_setitem(tmpArray, 6, r.getElement(1, 2)); > Ode.floatArray_setitem(tmpArray, 8, r.getElement(2, 0)); > Ode.floatArray_setitem(tmpArray, 9, r.getElement(2, 1)); > Ode.floatArray_setitem(tmpArray, 10, r.getElement(2, 2)); 172a173 > updateReferences(); 202a204 > updateReferences(); Index: Body.java =================================================================== RCS file: /cvs/odejava/odejava/src/org/odejava/Body.java,v retrieving revision 1.27 diff -r1.27 Body.java 296,301c298,303 < Ode.floatArray_setitem(tmpArray, 3, r.getElement(1, 0)); < Ode.floatArray_setitem(tmpArray, 4, r.getElement(1, 1)); < Ode.floatArray_setitem(tmpArray, 5, r.getElement(1, 2)); < Ode.floatArray_setitem(tmpArray, 6, r.getElement(2, 0)); < Ode.floatArray_setitem(tmpArray, 7, r.getElement(2, 1)); < Ode.floatArray_setitem(tmpArray, 8, r.getElement(2, 2)); --- > Ode.floatArray_setitem(tmpArray, 4, r.getElement(1, 0)); > Ode.floatArray_setitem(tmpArray, 5, r.getElement(1, 1)); > Ode.floatArray_setitem(tmpArray, 6, r.getElement(1, 2)); > Ode.floatArray_setitem(tmpArray, 8, r.getElement(2, 0)); > Ode.floatArray_setitem(tmpArray, 9, r.getElement(2, 1)); > Ode.floatArray_setitem(tmpArray, 10, r.getElement(2, 2));
Would someone with CVS access check in this in HEAD?
|