David Bender
Samuel Sonne
Ivan Jager
Matthew Brewer
Thomas Madden
Benjamin Hollis
Most 3D engines are optimized for intersection and collision detection. In contrast, this engine is optimized for calculating distances between a point or a line and the rest of the 3D world. In particular we want to be able to calculate all of the local minima relative to a point or a line segment. Imagine finding the distance to every surface within sight of a point. This gives us a 2 dimensional heightmap representing the distance from this point to the rest of the world. Now find all of the local minima on this heightmap. This engine's purpose is to find the relative positions of these local minima.
More specifically, this engine is optimized for finding these local minima incrementally. Consider a point and all of its local minima. If we move the point slightly, a lot of the information from the first point is still useful. This software caches the last known set of local minima, and intelligently adds or deletes members of this set when the point moves. The architecture of the engine allows the user to optimize it for his own usage patterns, by deriving from supplied parent classes and overriding the caching functions.
This engine was designed with simulations of topological path planning in mind, specifically Hierarchical Generalized Voronoi Graphs (HGVGs) which can be constructed incrementally using sets of local minima. Since local minima can be calculated relative to both points and line segments, the engine can be used to simulate robots that can be represented as points or rods.
The engine itself controls the main loop of the program, and contains the "main()" function. The user then builds his own entities in the world by deriving from Arbitrator. Each of these entities (probobly a robot, set of robots) gets a function which will be called regularly for waking its thread (e.g. IO functions), and a thread which it can stop or start whenever it likes. In this way the engine supports multiple robots simultaneously in the same world.
32 bit x86 running Linux or Windows.
Tested with gcc 3.3.4 on Linux and Microsoft Visual Studio 6.0 on Windows XP.
Presumably it should be easily portable to other *nix on little endian machines. There are a few issues with endianness: datafiles are in the machine's byte order, not network byte order. There are a couple of defines around that would have to be changed for 64 bit code on windows (see common.h).
The 3D rendering code uses OpenGL for both *nix and Windows. The entire system could be (and has been) compiled to use Glut under both Windows and Linux, but currently uses Windows native iterfaces when compiling under windows. One thing to note here is that the software only supports a single IO window.
1.4.3-20050530