Thank you, ynjh_jo. But it is not as shiny as it might look at first. ODE and Newton are very similar in what they can do or how fast they are. I think it is down to personal preferences.
for 1: Newton has joints too, and they are wrapped already, except for user defined joints (6DOF). Basic joints like ball, hinge, slider are almost the same in both engines. Newton has an UpVector joint for keeping actor upright even on slopes. And ODE hinge2joint is JointVehicle, only that you have to create one joint per vehicle and add tires to it.
for 2: The scaling is defaulted to (1,1,1) if I remember right. This is a code fragment remaining from some of my experiments with NodePath scaling. I have an unsolved issue when using setScale( ) on a node path, both from C++ and from Python. Panda3D crashes and complains about transform states having no previous state, weired). For now I use no scaling with Newton, until I found the reason for these crashes.
Hmm… about the coordinate system transformation. I thought I had it transformed from the geom nodes CS to the top NodePaths CS, but I might be wrong. I believe you are right, and will look at the code this evening.
for 3: The C++ transform callback ignores scale and shear for now. This is what I meant about scale. Perhaps I will change the API sometime to set position, orientation and scale of a Body, once it has become stable.
for 4: Friction is supported (of course :-), by employing a material system. Each body can have a material, and properties like static/kinetic friction, elasticity, softness can be set for a material pair. e.g. for vehicle tire on wet stone.
Newton offers a lot of callbacks to the user, for example if the simulations is advanced by a timestep dt then newton does update the position and orientation of a body. But the graphical representation is still where it is. So Newton offers a “transform callback” that gets called every time a bodies transform is changed by Newton. One useful thing to do in such a callback is updating the graphical object (NodePath). When wrapping Newton I decided to offer two choices. Either implementing a python method to do the updating of a NodePath (and whatever a user would want to do), or using a “default” callback implemented in C++. For most cases the default callbacks will be sufficient, and a little bit faster than Python callbacks.
A real advantage of Newton is the collision tree which can handle static geometry of 50000 and more polygons at reasonable speed, but raytaller has some very interesting Panda3D work here too. The big disadvantage: Newton is free but closed source
Please give me a few days. Even if there are still a lot of issues I will try to come up with a first release (including source and basic demos) next weekend.
enn0x