Alex Olwal 2005, CS280 Homework 3 - Projective Texturing & Shadow Mapping
Syntax: shader

All parts of the homework were implemented.

To make the main program easier to read, several (not-so-interesting) parts of shader.cpp were taken out and placed 
into files that are included at the top of shader.cpp. (while they have the .h suffix, they are not
header files in the traditional sense, just a quick way to "modularize" the code)

Pressing '?' to prints out the help text below (to stdout), which
describes the available commands:

---------------------------------

Alex Olwal 2005, CS280 Homework 3 - Projective Texturing & Shadow Mapping
Syntax: shader

Application key mappings

  Rendering:

   [ SPACE ] shaders on/off
   [ x ] toggle mode { projective texturing, projective shadows, normal lighting }
   [ m ] multipass rendering on/off

  Light manipulation

   [ LEFT / RIGHT / UP / DOWN ] rotate spotlight around center
   [ s ] spotlight on/off
   [ b ] background illumination on/off
   [ [ ] increase spotlight FOV
   [ ] ] decrease spotlight FOV
   [ p ] light perspective on/off

  System commands

   [ q ] quit

   [ F1 ] fullscreen
   [ F2 ] 400x300
   [ F3 ] 640x480
   [ F4 ] 800x600

  Mouse interaction

   [LEFT_BTN] selects objects or world for manipulation
   [LEFT_BTN + CTRL] translation in XY plane
   [LEFT_BTN + SHIFT] translation in XZ plane
   [RIGHT_BTN] rotation around X and Y
   [RIGHT_BTN + SHIFT] rotation around Y and Z

---------------------------------

Files:

> shader.cpp/.h
main program, initialization and rendering loop

	helper files for shader.cpp:

	> cg_functions.h
	CG related functions

	> interaction.h
	application specific keyboard and mouse interaction

	> lights.h
	light related functions

	> misc.h
	some initialization functions and OpenGL callback functions

> object.cpp/.h
handles rendering and transformation of objects

> material.cpp/.h
encapsulator for OpenGL materials

> transform.cpp/.h
functionality for OpenGL transformations

> util.cpp/.h
set of convenience functions, texture loading, etc

> keyboard.cpp/.h
encapsulates GLUT keyboard interaction

> mouse.cpp/.h
encapsulates GLUT keyboard interaction

> mesh.cpp/.h
a tessellated grid


> Release/hw2.cg	
shader programs

> Release/jpg/turtle.jpg
projection texture

> README		
this file

> Makefile		
Fedora Makefile

> vc60/*
Visual Studio workspace & project files (Win32)
