Components

The Adal Engine uses the following components:

Components feature lists taken from their respective sites.

OGRE (www.ogre3d.org)

Productivity features

  • Simple, easy to use OO interface designed to minimise the effort required to render 3D scenes, and to be independent of 3D implementation i.e. Direct3D/OpenGL.
  • Extensible example framework makes getting your application running is quick and simple
  • Common requirements like render state management, spatial culling, dealing with transparency are done for you automatically saving you valuable time
  • Clean, uncluttered design and full documentation of all engine classes
  • Proven, stable engine used in several commercial products

Platform & 3D API support

  • Direct3D and OpenGL support
  • Windows (all major versions), Linux and Mac OSX support
  • Builds on Visual C++ and Code::Blocks on Windows
  • Builds on gcc 3+ on Linux / Mac OSX (using XCode)

Material / Shader support

  • Powerful material declaration language allows you to maintain material assets outside of your code
  • Supports vertex and fragment programs (shaders), both low-level programs written in assembler, and high-level programs written in Cg, DirectX9 HLSL, or GLSL and provides automatic support for many commonly bound constant parameters like worldview matrices, light state information, object space eye position etc
  • Supports the complete range of fixed function operations such as multitexture and multipass blending, texture coordinate generation and modification, independent colour and alpha operations for non-programmable hardware or for lower cost materials
  • Multiple pass effects, with pass iteration if required for the closest 'n' lights
  • Support for multiple material techniques means you can design in alternative effects for a wide range of cards and OGRE automatically uses the best one supported
  • Material LOD support; your materials can reduce in cost as the objects using them get further away
  • Load textures from PNG, JPEG, TGA, BMP or DDS files, including unusual formats like 1D textures, volumetric textures, cubemaps and compressed textures (DXT/S3TC)
  • Textures can be provided and updated in realtime by plugins, for example a video feed
  • Easy to use projective texturing support

Meshes

  • Flexible mesh data formats accepted, separation of the concepts of vertex buffers, index buffers, vertex declarations and buffer mappings
  • Biquadric Bezier patches for curved surfaces
  • Progressive meshes (LOD), manual or automatically generated
  • Static geometry batcher

Animation

  • Sophisticated skeletal animation support
    • blending of multiple animations with variable weights
    • variable/multiple bone weight skinning
    • software and hardware-accelerated skinning pipelines with intelligent buffer sharing
    • manual bone control
    • Configurable interpolation modes, accuracy vs speed tradeoffs
  • Flexible shape animation support
    • Morph animation for legacy applications where you wish to perform simple linear blends between shape snapshots
    • Pose animation for modern shape animation, allowing you to blend many poses at variable weights along a timeline, for example expression / mouth shapes to perform facial animation
    • Both techniques can be implemented in hardware and software depending on hardware support
  • Animation of SceneNodes for camera paths and similar techniques, using spline interpolation where needed
  • Generic animation tracks can accept pluggable object adaptors to enable you to animate any parameter of any object over time

Scene Features

  • Highly customisable, flexible scene management, not tied to any single scene type. Use predefined classes for scene organisation if they suit or plug in your own subclass to gain full control over the scene organisation
  • Several example plugins demonstrate various ways of handling the scene specific to a particular type of layout (e.g. BSP, Octree)
  • Hierarchical scene graph; nodes allow objects to be attached to each other and follow each others movements, articulated structures etc
  • Multiple shadow rendering techniques, both modulative and additive techniques, stencil and texture based, each highly configurable and taking full advantage of any hardware acceleration available.
  • Scene querying features

Special Effects

  • Compositor system, allowing for full-screen postprocessing effects to be defined easily, via scripts if desired
  • Particle Systems, including easily extensible emitters, affectors and renderers (customisable through plugins). Systems can be defined in text scripts for easy tweaking. Automatic use of particle pooling for maximum performance
  • Support for skyboxes, skyplanes and skydomes, very easy to use
  • Billboarding for sprite graphics
  • Ribbon trails
  • Transparent objects automatically managed (rendering order & depth buffer settings all set up for you)

Misc features

  • Common resource infrastructure for memory management and loading from archives (ZIP, PK3)
  • Flexible plugin architecture allows engine to be extended without recompilation
  • 'Controllers' allow you to easily organise derived values between objects e.g. changing the colour of a ship based on shields left
  • Debugging memory manager for identifying memory leaks
  • ReferenceAppLayer provides an example of how to combine OGRE with other libraries, for example ODE for collision & physics
  • XMLConverter to convert efficient runtime binary formats to/from XML for interchange or editing

OPAL-ODE (http://sourceforge.net/projects/opal/)

  • Open Source
  • Cross-platform
  • Language: C++
  • 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
    • Boxes
    • Spheres
    • Capsules (i.e. capped cylinders)
    • Planes
  • User-defined triangular mesh collision detection (best for terrains)
  • Joints
    • Hinge joints (one rotational degree of freedom)
    • Universal joints (two rotational degrees of freedom)
    • Ball joints (three rotational degrees of freedom)
    • Wheel joints (two rotational degrees of freedom)
    • Slider joints (i.e. prismatic joints; one translational degree of freedom)
    • Fixed joints (zero degrees of freedom)
  • Motors
    • Attractor motors (provide gravitational attraction between two objects)
    • Geared motors (simplified automobile engines)
    • Servo motors (use limited torque to achieve a desired angle or velocity; similar to PD/PID controllers)
    • Spring motors (simple damped springs; pull objects to a desired position and/or orientation)
    • Thruster motors (provide a constant force on an object)
    • Velocity motors (use force to achieve desired velocity)
  • Sensors
    • Acceleration sensors
    • Incline sensors
    • Raycast sensors
    • Volume sensors
  • Event handlers
    • Collision event handler (notified when objects collide)
    • Joint break event handler (notified when a joint breaks)
    • Movement event handler (notified when solid changes its position or orientation)
    • Post-step event handler (notified at the end of each time step)

Audiere (http://audiere.sourceforge.net/)

  • Braindead easy API
  • Supported file formats: Uncompressed WAV*, Uncompressed AIFF*, Ogg Vorbis*, FLAC*, MP3, MOD, S3M, IT, XM (* supports seeking)
  • Streaming and buffered audio
  • Volume, pan, and pitch shift modification
  • Flat tone, square wave, white noise, and pink noise generation
  • Runtime enumeration of audio devices and supported file formats
  • Custom file streams
  • Python, Delphi, Java, XPCOM (JavaScript in Mozilla) bindings

AngelScript (http://www.angelcode.com/angelscript/)

  • Cross platform - It has been confirmed to work on Win32, Linux, MacOS X, XBox, PS2, PSP, Dreamcast, and Windows Mobile.
  • CPU independent - Both 32bit and 64bit platforms are supported. Both big endian and little endian CPUs are supported. Confirmed CPUs: x86, amd64, sh4, mips, ppc.
  • Compiler support - It works with MSVC++, GNUC, MinGW, XCode, and DJGPP. Other compilers haven't been tested yet.
  • Native calling conventions - The library support native functions, i.e. without the need for wrappers on the following configurations, and other compatible ones:
    • Win32 - MSVC - x86
    • Win32 - MinGW - x86
    • Linux - GNUC - x86
    • Dreamcast - GNUC - sh4
    • PSP - GNUC - mips
    • PS2 - GNUC - mips
    • XBox - MSVC - x86
  • Maximum portability mode - When the library is compiled in this mode it should work on just about any compiler/platform that can compile standard compliant C++ code. Some features like native calling conventions are not available in this mode.
  • Cross language - With the flat C interface, other languages, such as Delphi, are also able to use the library.
  • No costs - The scripting library is completely free for all use, though donations are appreciated.
  • Well documented - Both the script language and library is documented.
  • Familiar syntax - The script syntax is similar to that of C or C++, with only a few differences.
  • Statically typed - Unlike most scripting languages that are dynamically typed this one uses the same static types as C++, and applications can register additional types.
  • Direct access - The script engine can directly access and use registered functions, objects, and object members without the need to write proxy functions.
  • Object oriented - The script language allows for declaration of classes, and will soon permit polymorphism and inheritance as well.
  • Object handles - Pointers are not safe in a scripted environment, so AngelScript uses object handles instead. Object handles are almost like smart pointers, that control the life time of the object they hold.
  • Run-time compiled - The library compiles the scripts into byte code and executes the byte code through a virtual machine.
  • Step by step execution - The scripts may be executed line by line, for controlled execution and debugging.
  • Detailed exceptions - When an exception occurs information about why and where can easily be obtained.
  • Line interpretation - The engine can interpret separate script lines using the currently compiled script. Useful for Quake like consoles.
  • Saving/loading byte code - The compiled bytecode can be saved and reloaded at a later time.
  • Modular - Scripts can be compiled into modules that can be dynamically linked with each other.
  • C and C++ interface - There is a flat C interface that can be used by languages that don't interact well with C++ interfaces. It is successfully being used in Delphi projects.
  • Sandboxing - The library provides a secure environment for the scripts, i.e. the scripts can only access what the application explicitly exposes, and any built-in script objects are completely secure.
  • Concurrent scripts - Several scripts can be executed in parallel, by suspending and resuming them one by one. This allows for easy implementation of multi-tasking schemes, or even co-routines.
  • Debugging support - The application can examine the call stack and the value of local variables while running the scripts. The line callback feature allows the application to use breakpoints, do profiling, etc.
  • Multithreading - The library can be used in a multithreaded environment.