Project ][ -- Trains and Roller Coasters -- Readme.txt
By: Michael Young -- November 3rd, 2003 -- Computer Science 559

http://cs.wisc.edu/~myoung  --  mgyoung@wisc.edu
http://www.mikesshorts.com  --  mike@mikesshorts.com


This project is a train and rollercoaster graphics program.  For instructions
on how to use the program read the "documentation.txt" file.  This program's
features include:

Multiple viewpoints -
        - Sky-view camera
        - Train first person view
        - Train third person front view
        - Train third person rear view
        - Some misc. cinematic camera views
        - Camera tracking in/out translation
        - Special view for building the track

3-D Graphical User Interface -
        - Track can be modified in realtime
        - Modifiable single light lighting scheme

Scenery -
        - Variable sized and positioned pine trees

C1 and C2 cubic splines for track -
        - Catmull-Rom
        - B-Spline

Truly correctly oriented train in 3-D

Multiple train movement modes -
        - Conservation of energy mode with energy adjusting control
        - Forced speed if there is not enough energy to climb
        - Automatic energy calculation based on track's maximum height
        - Constant train speed mode with speed adjusting control

Adjustable gravitational constant

Hand-modeled classic train with -
        - cow-catcher
        - glowing red smoke stack
        - cabin

Variable spaced rail ties

Variable spaced track supports -
        - Allows for overpasses

Track supports which respect loops and barrel-rolls
        - If the track is oriented downward the support beams are not drawn
          so that the train won't run into them.

Parallel tracks

3-D Loop Capability -
        - Track up-vector can be specified via 3-D GUI

Save and load feature -
        - Saves track, train speed, lighting scheme and several other
          settings

User specifiable window resolution

Keyboard controls allowing for full screen display


Classes and codes used:

        MyArcBall -- For main sky-view.  By Michael Gleicher.

        RunButton -- For redraw loop.  By Michael Gleicher.

        3DUtils -- For drawing cubes.  By Michael Gleicher.

        UserBox3D -- Object class for representing control points and tree
                     objects.  By Michael Young.

        SegEqn -- Object class containing cubic segment equations.
                  By Michael Young.

        Windowed FlTk text input function by Bill Spitzak.

All other code written by Michael Young.  The main program is contained in
3d.cpp.  In addition, there are several track files listed as "trackX" which
were created by Michael Young.  There are also some files for testing specific
aspects.  "barreltest" tests barrel rolls.  "looptest" tests true loops.
"physicstest" dramatically tests conservation of energy in the train's motion.
