In my experience there is a limitation which prevents summing masses except at their cg.  In general, in order to make a single body with a complex mass you need to use transform geoms.  Unfortunately I'm not sure whether applying the rotation to the transform geom solves your problem.  Looking at my code I have a comment that I need to use mass.rotate() but then I don't.  I may have just punted and left it as a loose end.  My code is using the Ode implementation in Panda3d which is based on a different version of ODE and does not use transform geoms so I can't really help you with code specifics.


On Sat, May 19, 2012 at 5:23 PM, Bill Call <> wrote:
Hi :

I'm trying to build a rigid-body simulation using PyODE/PyOpenGL. Since
I'm  just doing rigid-body,  it is my understanding that I have no need
for joints; I just need to add masses to my body at the appropriate

I have a number of cylindrical masses in my body.  These cylinders have
fixed positions and rotations within the body, but are not necessarily
aligned with the X, Y or Z axis.  PyODE does not bind the rotateMass()
function from ODE; it only allows me to specify an X, Y or Z orientation
for cylindrical mass (at creation time). This means that I am unable to
rotate my cylindrical masses to the correct orientation.

My guess is that this would not be a problem if each of these masses had
their own Body; I could just rotate the body after the mass was bound.
Doing doing it that way might work, but it would mean connecting the
cylinders to the main body via joints, and what little documentation
there is seems to contraindicate the use of joints for rigid-body

My questions are as follows:

1) Am I correct in my assumption that I must rotate/translate the mass
tensor to reflect the true location/orientation of my cylindrical masses
within the containing body?  It seems (to me) to be intuitively obvious
that I do, but I don't put much stock in my intuition regarding this

2) If the answer to (1) is "yes", then can anybody point me a rotation
implementation?  If "no", then would someone be willing to explain why not?

I have already spent a lot of time Googling about for this information,
but I am not sufficiently grounded in the subject to really understand
the answers I have been able to find on my own; not well enough to write
a function to rotate inertial tensors, anyway.

Thanks in Advance,

Bill Call

Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
Pyode-user mailing list