Skip to main content

Jet Game Engine: Fabulous Features

The engine is finally approaching some kind of maturity. Here is a tally of the features I've finished so far:
  • Renderer: Written from stratch in DirectX, heavy use of HLSL
    • HDR Rendering
    • Bloom Effect
    • Cubemapping (shader driven)
    • Bumpmapping (shader driven)
    • Scriptable particle system
    • Billboards/textured quads
  • Physics: Using ODE.  Supports simple sphere volumes, box volumes and planes
  • Persistence: Through XML using eXpat.  All engine objects are XML-configurable
  • Scripting: Using Lua.  All engine objects can be manipulated by script
  • Audio: Using FMOD, with 3D sound!
Of course, these features are only a small subset of the features provided by a modern engine, but my goal was to make a uniform, easy-to-use, API. I strive to make each of the features my engine has as solid and well-engineered as possible. I'm using the quality-over-quantity approach. After all, I'm just one person, not a team of 300.

Most of these features are in the demo.


Popular posts from this blog

Lua-Style Coroutines in C++

Lua's implementation of coroutines is one of my all-time favorite features of the language. This (short) paper explains the whole reasoning behind the Lua's coroutine implementation and also a little about the history of coroutines. Sadly, coroutines are not supported out-of-the box by many modern languages, C++ included. Which brings me to the subject of this post: Lua-style coroutines in C++! For those who don't know (or were too lazy to read the paper!), Lua's coroutines support three basic operations: Create: Create a new coroutine object Resume: Run a coroutine until it yields or returns Yield: Suspend execution and return to the caller To implement these three operations, I'll use a great header file: ucontext.h. #include <vector> #include <ucontext.h> class Coroutine { public: typedef void (*Function)(void); Coroutine(Function function); void resume(); static void yield(); private: ucontext_t context_; std

Criterium: Road Screenshots

I finally got around to making the road tool for Criterium.  The tool has two parts: a Java application that lets you paint roads on the 2D heightmap texture, and a Ogre-based tool that automatically converts a 2D path into a 3D mesh.  The Ogre-tool queries the heightmap to get the height of the road, and performs smoothing so there are no discontinuous road segments.  I've posted a screenshot below.  Also, I've got my GIMP terrain shown in the screenshot.  I generated it using random noise and the GIMP lightmap filter.

Jet: Particle Systems

Here's a demo of the new particle systems I've implemented in OpenGL.  Performance is much improved over the DirectX version.  Particles are initialized in C++ rather than in Lua.  Also, I use two particle buffers and swap between them, rather than using one buffer per particle system.  Anyway, here's a video capture: