CS 460: Interactive Graphics and Games
Project #1

Synopsis: Build the basic underpinnings of a 3D scene-graph engine.  Your program should be able to import 3D models with hierarchical transformations, place them into a scene graph, and render the scene.  Your scene graph should support multiple traversals (for example, to render the scene from multiple interactively controlled cameras), along with basic view-frustum culling and basic LOD.  Finally, your group should decide on and propose the game you will build.

Due: This assignment has multiple components, each quite challenging in its own right.  To help you organize your effort, we will check your progress midway through:

    March 2, 2005    Checkpoint: Load and fly around multiple models (40%)
    March 9, 2005    Final assignment: Everything else (60%)

Details: This is where you start: in this assignment your group will build a basic scene-graph renderer that will become the base of your game engine.  Your renderer should support:

Resources: There are many places you can go to look for advice, tutorials, details, and source code for games, from loading file formats to AI and physics.  This can be frustrating, however, as many of the resources on the Web are the results of enthusiastic amateurs rather than paid professionals.  Some good places to start are:

Also, don't forget about the optional texts for the course like the game programming gems series!

Lab: The undergrad CS lab in NEB 214 has Windows NT boxes with NVIDIA GeforceFX class graphics cards. If you want an account there and do not have one yet, you will need to fill out an account request form and have me sign it. There is still some hope that a linux lab will emerge as well, but do not pin your hopes on it. If you would rather work on a personal machine, that's fine too -- in fact it will take the pressure off the lab machines.  Let me know any issues you encounter -- you are the first graphics class to make any serious use of the lab for hardware-accelerated 3D rendering, and there will undoubtedly be software, hardware, and availability issues to work out.

Policy on code reuse: In general you are welcome to use code that you find elsewhere.  For example, you are welcome to use the lib3ds library mentioned above. However, you will not get credit for what you didn't write.  Therefore, it is critically important that you describe in detail what code you wrote yourself and what code you imported or adapted from elsewhere.  Furthermore, if you find a particularly helpful library, tutorial, loader, etc., you should post it on the forum.  Obviously if you reuse a significant amount of code, that raises the bar for the assignment: you will be expected to do something beyond the basics mentioned above.  If you have any questions about code reuse or attribution, please ask me.

Platform: You are welcome to code under Windows (Visual Studio 6 or 7) or linux. Remember, though, if your program will not run on any of my machines, you will have to lend me your machine for grading purposes!!

Turning in the assignment: Checkpoint: Demo to the instructor that you can load and fly around multiple models.  Final assignment: Put all your code and models in a folder, along with a detailed README.txt file that describes what your group did, who in the group did what, what code you wrote and what code you used from elsewhere, and how to run your assignment.  Zip up the folder and e-mail a link to me.  Be sure to include workspace and project files, along with any libraries/include files/etc, so that I can compile your code.  I will read (and grade you on) your source code, so follow good programming practices.

Advice: If this sounds like a lot for a two-week assignment, that's because it is a lot.  An awful lot. This will be the hardest assignment in terms of the sheer amount of code you need to write.  It is particularly important to start early because you will be building on this code for the remainder of the course; a careful and thoughtful design now will simplify everything down the road, whereas a rush job will introduce bugs and design flaws that will continue to bite you throughout the semester.  Now is the time to follow good careful software engineering practices: think carefully about your design BEFORE you start, test your classes and functions early and often, and use CVS to back up your work for disaster recovery and revision control.