ode4j

A Java 3D Physics Engine & Library

About
Features
Documentation
Download
Contact

Features & Screenshots

  • 100% pure Java port of the ODE / OpenDE physics engine. Native libraries are only used for the OpenGL rendering in the demos (thanks to lwjgl).
  • Includes ports of GIMPACT and libccd, not in their latest version, but as they are included in ODE. For GIMPACT that is pre-0.2, for libccd that is some pre-1.3 version (as of ODE 0.13.1).
  • Fast. It is in some cases even faster than the original C/C++ ODE. Please note that only the physics are fast. The graphical rendering in the demos is not optimized and quite slow.
  • Provides javadoc, ~30 demos, complete source code and test harnesses (JUnit).
  • Supports all geometries from ODE: box, convex, capsule, cylinder, plane, ray, space, sphere, heightfield (a kind of trimesh) and trimesh (GIMPACT port, still beta state). ode4j uses the libccd colliders. The old colliders can be enabled through OdeConfig.setLibCCDEndabled(false) (before calling anything else).
  • Supports all joints from ODE: AMotor, Ball, DoubleBall ContactJoint, FixedJoint, Hinge, DoubleHinge Hinge2, LMotor, Piston, Plane2D, PR, PU, Slider, Transmission and UniversalJoint.
  • Supports all spaces from ODE: SimpleSpace, HashSpace, QuadTreeSpace and SAPSpace.
  • Java specific optimisations.
  • A more object oriented implementation.
  • Provides an alternative API which is a direct port of the original C API. This simplifies understanding the existing documentation & tutorials and helps porting other ODE dependent code, but is not recommended, because it is less object oriented.
For physics features, please refer to the ODE-Wiki

Some screen shots from the demo_crash (one of many included demos):
demo_crash1demo_crash2demo_crash3demo_crash4


Status

  • Currently, the port has only been tested through the available test harnesses and through running the included demos. Functionality that is not used in either may not be function correctly or may not be available at all. Please point out these cases to me.
  • ode4j uses 'double' precision. A single ('float') precision version may improve performance by 10%-20% (based on a singular test). Also, the code provides some features that should allow a rather simple port. But there are currently no plans for such a port.
  • Trimesh / GIMPACT: Trimesh support contains no known bugs except bugs that are also present in ODE for C/C++. However, performance has still not been optimized for Java.
  • LIBCCD: A LIBCCD port is enclosed and can be enabled through OdeConfig.setLibCCDEndabled(true) before doing anything else.
  • Multi-threading: Since 0.13.0, ODE supports multi-threading. Most of it has been ported to ode4j, but some parts are still missing. So it is currently disabled.
Next Steps
  • Complete support for multi-threading
  • Look into optimizing OpenGL usage in demos. This should also fix the GL related bugs.
  • Port OPCODE library
  • Improve javadoc (copy it from C++ API to object oriented API
  • Fix known bugs
  • Improve webpage.


© Copyright 2014 Tilmann Zäschke [ode4j AT gmx DOT de]