Submitted by , posted on 29 July 2003
Image Description, by
Because of all the new 3D these days, programming isn't so much knowing how
a computer works, but the 3D math.
I always wanted to do stuff in software, knowing each step of what happens
when my code is executed. Therefore,
I made this sofware "3D" engine using the same technique as the old SNES
Mode-7 (hence I named my engine "Mode7").
Here are four shots from my up-coming Mario Kart clone. The lower left pic
was taken in 512x384x32, and the rest
taken in 640x480x32. As you can see, the FPS count isn't at all bad. The
sprites and the background are blitted
using hardware, the rest is drawn on a per-pixel basis. So, how can the FPS
be that high? Well, the first reason
is that I'm running it on a XP2400+ :). The second (main) reason, is because
the renderer is written in inline
assembly. Running it in the optimized 16-bit mode in 320x240 gives an
amazing FPS count. It runs quite well even
on a P200 (in 320x240x16). I don't remember the exact FPS I got, but I know
that it ran smoothly on a P166. That
was one of my main goals: getting it to run well on an old computer without
hardware support. I'm pretty proud
of it, even if I say so myself -_^.
Here's the obligatory feature list:
Fast software 3D renderer written in inline assembly
Runs in any resolution and bit depth (selectable by the user)
Tile based maps
Uses logical cameras to make it easy to understand and use.
Renders to definable viewports so that you can easily make it split
Simple to setup
Support for sprites, using a sprite list.
Sprite sorting for correct draw order
Simple frustum culling for the sprites
Supports sprites from 8 different angles
Editor that runs in 3D mode
Maps can be of any size and have any number of spirtes
What I could still add is more optimization using MMX, But lately I've been
rather lazy and havn't worked on it
for a month (>_<). I hope to be getting the Mario Kart clone up 'n running
this autumn with split screen and
multiplayer support. Any questions or comments can be sent to :