[ODE] a few things (tools, and a transform mystery)

cr88192 cr88192 at hotmail.com
Tue Jul 12 17:25:34 MST 2005


sorry, this isn't directly related to ode, but the people here may know 
something or care or something.


also (first off), if anyone cares I wrote a few minor tools:
one takes a trimesh and makes a convex hull;
the other takes said convex hull and makes another trimesh (representing the 
boundaries of the hull).

also tried (but failed):
the first tool above, but attempting to use a much faster algo (the first 
tool has a complexity somewhere between O(n^3) and O(n^4), where n is the 
total vertex count (it works by generating and testing a set of all possible 
planes).
I attempted an O(n^2) algo (tries to make planes from edges), but it doesn't 
seem to work in general.
the runtime for the first tool, for a 350 vertex model, is about 1m.

a tool attempting to process a trimesh, and make a set of convex hulls 
representing the original model. I attempted to use bsp, but it failed to 
produce "sane" geometry for this task, a new algo idea popped up, but I 
don't feel like it right now and the complexity would probably be closer to 
O(n^5) or O(n^6) anyways (basically, it would consist of trying to hybridize 
the first algo and bsp to do the partitioning, eg, using the O(n^4) algo to 
look for division planes...).

these could be useful if anyone is intending to add convex hulls to ode (and 
there is some issue with other similar tools).


next up:
I am writing my own physics engine, and something has popped up that I don't 
understand.
one would intuitively think (I guess) that one would do a set of horizontal 
dot products on a matrix to transform a point to local space, and a set of 
vertical products to convert to worldspace.

in a recent example (this has also occured previously, but I had ignored it 
in the past as it is not that hard to figure out and fix) I have to do the 
opposite to get correct behavior.

this does not seem to make much difference in the trivial case (eg: directly 
converting from global to local space), but in the case where the vertices 
are converted to local space and used later (which a different transform 
back to global space) it makes a signifigant difference.

it is my understanding (and it also seems to hold with experience) that it 
is the horizontal components of the transform which represent the unit axis.

[IX IY IZ Tx]
[JX JY JZ Ty]
[KX KY KZ Tz]
[0  0  0  1 ]

I would think (where L is local and G is global):
L=(G*I, G*J, G*K)-T
G=(L*X, L*Y, L*Z)+T

but instead I need to do:
L=(G*X, G*Y, G*Z)-T
G=(L*I, L*J, L*K)+T

it seems that I, J, and K still represent the unit axis.

something here just seems to not make much sense to me.

note: I am not dealing with gl-order matrices, so I doubt it is a transpose 
problem (it is possible one of my math functions somewhere is transposed), 
however, I would have sensibly noticed this allready afaik, and these same 
matrices are used for lots of other things with no noticably weird 
behavior).

can anyone explain this or provide links with some kind of explanation?
(am I missing something obvious here?).

I just feel it would be helpful to know what exactly is going on here.


More information about the ODE mailing list