OPAL is a high-level interface for low-level physics engines used in games, robotics simulations, and other 3D applications. Features a simple C++ API, intuitive objects (e.g. Solids, Joints, Motors, Sensors), and XML-based file storage for complex objects.



  • June 23, 2010: OPAL development has officially ended. (The code repository will remain on SourceForge for some time, but any new projects should avoid using OPAL.) At the time when this project started, it served its purpose: an open source, cross-platform, simple API for physics simulation, mainly as a simple interface to the ODE simulation library. Now there are other more robust alternatives (e.g. the excellent Bullet physics library). For people looking for an abstraction layer around multiple physics libraries, we suggest the Physics Abstraction Layer project.
  • May 16, 2006: Version 0.4.0 released.
  • October 19, 2005: Version 0.3.1 released.
  • April 21, 2005: Version 0.3.0 released.
  • February 10, 2005: Version 0.2.0 released.
  • November 1, 2004: Version 0.1.0 released.


Supported Physics Engines


Current Features

  • Open Source
  • Cross-platform
  • Tested on Linux, Irix, Windows, and Mac OS X
  • XML file loading
  • OPAL XML exporter for 3ds Max
  • Breakable joints
  • Linear and angular motion damping
  • Per-shape material settings
  • Contact groups (define which objects can interact physically)
  • Collision detection primitive shapes

o      Boxes

o      Spheres

o      Capsules (i.e. capped cylinders)

o      Planes

  • User-defined triangular mesh collision detection (best for terrains)
  • Joints

o      Hinge joints (one rotational degree of freedom)

o      Universal joints (two rotational degrees of freedom)

o      Ball joints (three rotational degrees of freedom)

o      Wheel joints (two rotational degrees of freedom)

o      Slider joints (i.e. prismatic joints; one translational degree of freedom)

o      Fixed joints (zero degrees of freedom)

  • Motors

o      Attractor motors (provide gravitational attraction between two objects)

o      Geared motors (simplified automobile engines)

o      Servo motors (use limited torque to achieve a desired angle or velocity; similar to PD/PID controllers)

o      Spring motors (simple damped springs; pull objects to a desired position and/or orientation)

o      Thruster motors (provide a constant force on an object)

  • Sensors

o      Acceleration sensors

o      Incline sensors

o      Raycast sensors

o      Volume sensors

  • Event handlers

o      Collision event handler (notified when objects collide)

o      Joint break event handler (notified when a joint breaks)

o      Post-step event handler (notified at the end of each time step)


Planned Features

  • XML file saving
  • OPAL XML exporter for Blender


OPAL is Copyright 2004-2005 Alan Fischer, Andres Reinot, and Tyler Streeter