Defining ODEThis is a featured page This reference will provide a run-down overview of the ODE objects, terms and definitions. Being a rather technical field, the learning curve for ODE is higher than that of learning other more computer-orientated subjects. It is hoped that this guide will help ease that stumbling block. Using: ODE.NET 0.9 Setting up ODE.NET and IrrlichtNETCP - Cardinal CodezThe Building Blocks In ODE, there exists 7 different units with which we can define our objects with. They are: body, mass, world, geom, space, joints and force. Body Unlike physical bodies, the ODE Body does not occupy space and has no concept of mass. The Body is just a container to store a position, rotation, angular and linear velocity. Mass A Mass is just that: weight. Normally, a Mass of a specific value is created just for the purpose of giving a Body a weight. Following that, the Mass is deleted out of redundancy. World The World contains every object that currently exists in the ODE world. Like an actual world of its own, it possesses its own time frame. Every step of time that you advance in the World, will move objects accordingly to whatever force is applied to them. Geom Geom defines the shape of a body, which allows ODE to perform collision checks. Space A Space is a group of Geoms which allows ODE to do selective collision checks based on the positions and relevance of each Space. That is less computationally intensive compared to checking every single Geom there is. Joints Joints allow two or more Bodies to have a constrained position and orientation based on their relationship. Its function is akin to what hinges or sockets do. However, Joints can also be Contact Joints, which are formed when two Bodies collide with each other. This is a temporary Joint that describes the physical characteristics of the Bodies, such as elasticity and friction. Force Without Forces, none of the Bodies will be moving anywhere. Once given a Force, the Bodies will continue moving due to inertia and will not stop till they suffer retardation via friction. Everything would have been fine and dandy if ODE.NET defined these separate elements as clearly as such. In ODE, we do have dGeom, dWorld, dMass, dBody, dJoint, dJointGroup as well as their ID reference equivalents dGeomId, dWorldId, etc. However, ODE.NET being the wrapper that it is, is unable to wrap these individual classes as effectively. What we have in ODE.NET instead, are the generic and ambiguous IntPtr references that could mean everything from dGeomId to dBody. There are some exceptions to make things all the more 'fun', like the presence of the C# class d.Mass. Hence IntPtr being so confusing as it is, it is helpful to define a custom class that will act as a container to organize between the different types of IntPtr.