bareVR.c


/* bareVR.c - A bare-bones VR program to be used as a starting point
        for Eng 591, Virtual Reality Programming.

        Written August 1999 by John T. Bell

        Last modified _________ by __________
*/


#include <stdlib.h>
#include <stdio.h>
#include "wt.h"

/* Function Prototypes */

void UserActions( void );

/* Global Variables - Use only when NECESSARY */

WTnode *Root = NULL;
WTviewpoint *Viewpoint = NULL;
WTsensor *Mouse = NULL;

int main ( int argc, char **argv )

{

        /* Intialize the Universe */
        
        WTuniverse_new( WTDISPLAY_DEFAULT, WTWINDOW_DEFAULT );
        
        /* Set some global variables */
        
        Root = WTuniverse_getrootnodes();
        Viewpoint = WTuniverse_getviewpoints();

        /* Set up devices */

        WTkeyboard_open();

        Mouse = WTmouse_new();
        if( !Mouse )
            WTerror( "Sorry;  A mouse is required to run"
                " this program.\n" );
        else {
            WTmotionlink_new( Mouse, Viewpoint, WTSOURCE_SENSOR, 
                    WTTARGET_VIEWPOINT );
        }

        /* Build the scene graph */

        WTlightnode_newdirected( Root );
        WTnode_load( Root, "oplan.nff", 1.0 );
        WTnode_load( Root, "clown.dxf", 1.0 );
        WTnode_load( Root, "lunchbox.3ds", 1.0 );
        WTnode_load( Root, "snail.wrl", 1.0 );

        /* Initialize the viewpoint */

        WTwindow_zoomviewpoint( WTuniverse_getcurrwindow() );
        
        /* Setup the action function */
        
        WTuniverse_setactions( UserActions );

        /* The "go" function runs the simulation.  
           It doesn't return until we quit. */

           
        WTuniverse_ready();
        WTuniverse_go();
        
        /* And now to clean up our toys and go home. */

        WTuniverse_delete();

        return 0;

/* End of Main Routine */

/********************************************************************************/

void UserActions( void ) {

        short key;

        /* Process Keyboard Input */

        key = WTkeyboard_getlastkey();

        if( key ) {

            switch( key ) {

                case 'q':
                case 'Q': 
                        WTuniverse_stop();
                        break;

                case 'p':
                case 'P':
                        WTnode_print( Root );
                        break;

                case 'h':  /* Help - Fall through to default */
                case 'H':
                case '?':   

                default:
                        WTmessage( "\nThe following keys are active:\n\n" );
                            WTmessage( "Q or q: Quit.\n" );
                        WTmessage( "P or p: Print scene graph.\n" );
                        break;

            }
        }

        return;

/* End of UserActions */