3D Package Demo
---------------
Here's a demo of the new 3D package(s). Five renderers have been
built, all using the same basic package but with different
options enabled. The renderers are capable of drawing:
(1) Wire Frames
(2) Gouraud Shading only (no texture maps)
(3) Plain Textures (no shading)
(4) Flat Shaded Texture Maps
(5) Gouraud Shaded Texture Maps

Renderers (3)-(5) are also capable of supporting plain Gouraud
shading for surfaces without any texure specified.

All of the renderers (except for the Wire Frame one) use a Z buffer
for hidden surface removal. Z buffering was chosen as the most
general hidden surface removal algorithm available. Converting
a renderer to use a different hidden surface removal algorithm
should not be difficult in principle; a front end to sort
polygons is all that would be required.

The renderer code is modular, with 4 basic modules: initialize,
load a polygon, clip a polygon, and draw a clipped polygon.
The first two modules are used to convert the external
representation of polygons into internal format. The second
two modules are more or less independent of external format.
Ease of use and extensibility were important considerations
in the design of the 3D package. In particular, it will
be very easy to convert the polygon drawing routines to
use more advanced hardware which may become available in
future Jaguar consoles.

This code is still very much work in progress, and several
obvious optimizations have not yet been implemented. In
particular, the demo uses an old format (compatible with
the renderer distributed with the developer's documentation).
A new, more efficient format has been developed, but tools
for converting to this format from 3D Studio are not yet
available. Some other optimizations that will be made are:

(1) The option to use phrase mode in Gouraud shading.
(2) More efficient perspective calculations.
(3) The point transformation code has not yet been
    fully optimized.



Controls:

Option		Change models

#		Move to next renderer
*		Move to previous renderer

A		Move model closer to viewer (decrease Z)
B		Move model slightly closer to viewer
C		Move model further from viewer (increase Z)
2		Move model up (decrease Y)
8		Move model down (increase Y)
4		Move model left (decrease X)
6		Move model right (increase X)

up,down		Rotate model
left,right	Rotate model
1,3		Rotate model

Holding down 0 along with any of the movement or rotation
controls above causes the camera to move or rotate rather
than the model.


