COMS 4160 Assignment 4

Due: Dec 11, 11:59pm, Web site included (demos on Dec 12, Milestone due Nov 22, 11:59pm)

Turning in A4 (subject to change):

Milestone (due Nov 22, 11:59pm)

As with the previous assignment, this can be a challenging assignment. However, you now know OpenGL, so I assume it will be somewhat easier. As before, the milestone is worth 10 points and the assignment itself worth 120 points. The point of the milestone is not so much for grading purposes, but to get you to start early on the assignment, and especially to seek help from the instructor or TA if you have problems, before it is too late. In any case though, if any problems arise at any time, please seek assistance from the instructor or TA.

For the milestone, you should submit the following. In this case, you should set up a webpage, e-mailing cs4160@cs.columbia.edu a pointer to it (this will preview the final website you will set up).

Based on this milestone, we will probably tell most groups they are fine or provide a brief word of caution or encouragement. We will especially try to meet with groups that appear to be in trouble (although you should also make efforts to seek help from the instructor and TA in that case).

Write a game [120 points]

Goals

Write a game. Your game doesn't have to be anywhere near as cool or complex as Quake 3 (which was written in OpenGL), but it should be playable. The goal here is to learn about writing real-time interactive OpenGL applications, not to spend all your time creating more intelligent computer opponents. This is not in any way to suggest that you shouldn't be as creative as possible. But remember, pretty will only get you so far. Definitely prioritize functionality over originality.

You may write code that uses advanced features of the latest graphics cards. The lab has both nVidia FX and ATI Radeon 9800 Pro cards. These are only available on winXP. Make sure to include all the libraries and dlls. Assume nothing about teh machine that will be running your code. If you code for linux, you must use only standard openGL commands. You may bring your own laptop for the demo session.

For the purposes of this assignment, a 3D video game is an interactive 3D computer graphics application written in OpenGL that involves some concept of scoring and/or winning and losing.
The basic requirements are

Additional Requirements: Besides the above basic requirements, you must have the following (not required for CVN students working alone):

The idea is to create a reasonably complex, and visually pleasing environment that has dynamic aspects, but can still run at playable speeds. You might find that carefully choosing material properties will get you further in this direction than texturing everything.

We would recommend that you create a basic game that works, and only then start improving it bit by bit.

You are limited to 1MB of textures. The idea behind this is that you can create very neat effects by using textures wisely. If you just throw up a 10MB image of a backdrop, your game performance will suffer, and you will not have demonstrated anything useful. You may use any format you like, as long as you provide the libraries and utilities on teh website.

You are limited to 5MB of object description files. Unlike in HW3, you may design as much as you like in a modeling program. This is ok since you'll have to implement object movement and collision detection on your own. Use whatever format is most convenient, but you must provide all the libraries and utilities.

Beyond these requirements, you are free to exercise your creativity. You may look at the optional features in the previous assignment for some ideas. Additionally, you may want to include sound effects and AI for the computer opponents, although this is not required and you should not be worried if your game is silent and the computer opponent is dumber than a post (a moving post).

This project could either be a lot of fun or something from hell. Some of you will clearly go overboard and write a game on which to base a startup company. While we certainly don't want to stop you, please remember that you don't need to go overboard. Get functionality working first, and then add glitz and extra features. Set some initial goals given your abilities, time available (1 month), other commitments, etc. The goal is to write an interactive OpenGL application, not the next killer game. And please START EARLY!!

The grading criteria will basically depend largely on the graphical complexity of your game (how many features you implement) and a general evaluation of the difficulty level and ease of game-play of your project. We will award approximately 90 points for a game that satisfies the basic requirements, essentially fulfils the graphical complexity requirements of assignment 3, and is interactive, easy and fun to play. The remaining points will necessarily be awarded on more subjective criteria, with more points for games of higher quality. Your README file should document all features that you think we might be interested in (and others necessary for playing the game).

Helpful hints

This is a more open-ended assignment. As such, there is no code framework, although your solution to homework 3 might be the best place to start. Also, see the helpful hints above, which provide links to game development resources. If you have questions, please feel free to contact us. Some comments that you might find useful are below. First, with respect to game design, you don't need to come up with an entirely new idea, and may reproduce an existing video game (provided it is in 3D, has collision detection, etc.) You could also take a 2D game and make it 3D. The following suggestions are for if you are stuck:

Your game should be highly interactive; that is, your program should be constantly redrawing to generate moving objects, and requiring continuous input by the user or game player. By these criteria you should avoid card and board games. If you're at a total loss as to what to do, implement Astroids. It's a good starter game, and it is not difficult to get the basic functionality to work out. You can always add functionality and glitz.

Interactive 3D graphics programs such as video games place special demands on computer hardware. If your 3D world is particularly large or complex, or if you use certain OpenGL rendering features (such as texture mapping), you will probably need special graphics hardware in order to get real-time performance. Modern PC systems with fast 3D graphics accelerator cards will usually yield satisfactory performance. If you develop your game on multiple platforms, it will probably be useful to add options to disable expensive features (such as texturing) on request. The performance of your video game is important, so do not implement too many expensive rendering features if the gameplay is negatively impacted! There are some pointers on the Web page above to sources of information on maximizing OpenGL performance.

Most successful video games include richly detailed 3D models, textures, sounds, and other content for representing the game world and characters. You have several options available in creating the 3D models for your video game. Simple models can be sketched on graph paper, and the coordinates manually typed into your source code. Models can be procedurally generated, as mentioned above. You can use a 3D modeling package and export the model in a format your program can read. The links Web page above will contain pointers to several freely available modeling packages. The GLUT library provides functions for drawing a few simple 3D shapes (sphere, cube, teapot, etc.) You can find a wide variety of 3D models available on the Web (see the pointers on the assignment Web page). These may need to be converted to a format your program can use.

Acknowledgements

This assignment is adapted from a number of sources, with special thanks to Anat Caspi and Greg Humphreys.
Ravi Ramamoorthi