Game Engine
Below is an XML driven "engine" I wrote to educate myself regarding modern game engine design and data structures. Have implemented scenegraph,
renderqueue, HID support, limited physics and collision detection, .x file import, textures, and other features. All of which are
configurable though the XML. Key elements missing are scripting, AI and space partitioning. This is an ongoing "playpen" for me to extend
when I'm ready to learn something new. It is not intended to ever be a full featured game engine. Several demos are included in the zips.
See included readme files for usage. Requires
DirectX9.
Download Binaries Version 0.08 1-17-05
Download Source Version 0.08 1-17-05
Core Design Document
XML Schema Specification
The screenshots below demonstrate various engine features. All shots were taken from the same code base, version 0.08. Only the
xml and resource files were changed to generate the scenes below. These demos are included in the binary and source packages above.
A cube with a different texture applied to the top-left face than the other visible faces.
The geometry and texture information is read from a '.x' file exported by Blender. Lighting, camera, view
and scenegraph information resides in the XML file (generated by hand).
XML Scene File
This scene consists of two views and cameras. The primary view displays some sample geometry and the view frustum of the other camera.
The small view in the upper left corner of the screen shows the same scene from the second camera's perspective. The engine is running
in debug mode so objects that would normally be culled show as wireframe. Notice that the teapot is outside of the second camera's
frustum and appears as wireframe to the primary camera. In the small corner view the teapot is not visible as expected. This scene is
used to unit test frustum culling.
XML Scene File
This screen is split 50/50 vertically into two views. The cameras are orientated on opposite sides of the scene's geometry facing each other.
The cube and the teapot are rendered blended. However, the monkey between the cube and teapot is solid. This scene is used to unit test the
render queue system. Since the camera position is different for each view, the blended geometry must be rendered in a different order for each view.
The precedence for the queue is configurable in the XML via the RenderPass tag.
XML Scene File
Brew (Wireless Games) Demo
Brew is a proprietary development API for phones by QualComm. It features good integration with the
familiar MS Visual Studio IDE. Binaries can by tested in a "simulator" provided with the Brew SDK. Unfortunately, a $400/year fee is required
to obtain the tools that allow you to test your game on a genuine phone and additional funds are required to publish. Nevertheless, it's a hoot
to roll back to the '80s and work on some 2D fun that focuses on gameplay.
Brew Pong: This is my first Brew app. A simple pong clone to get a feel for the Brew API. I also posted the main source file which
includes the meat of the game but omitted the overhead code, resources, etc.
pong.c
Shadow Volume Demo
An implementation of shadow volumes that I wrote as part of a class. It is not part of the
engine above. DirectX9 required.
The small white spheres represent the light sources.
One shadow is projected for each light source.
Download Binaries