Projects / Project 3

Project 3: Graphics Town

Note: Because of some University rules, all work you do (including giving a demo) is supposed to be done before exams begin. This means that project demos will be the last week of classes.

Note: for this project you may work together in teams of two. If you plan to do this,  send a mail to Sajika Gallege before 11:59pm on Wednesday, April 14th.

1. Overview
2. Historical Note
3. Objectives
4. Project Phases
5. The Basic Requirements
6. The Sample Solution
7. What to hand in
8. Other Resources
9. Grading

 Quick Links: Graphics Town example code, Technical Challenges and FAQ, Previous Student Ideas and Gallery

 

1.  Overview

In project 2, you have created a simple environment with a single moving object. The goal of this project is to create a more complex environment with multiple moving objects. For example, this environment can be an extension of your project 2 -- you can turn it into a theme park where you have multiple tracks with multiple cars. The track can go through tunnels, whose interior surfaces can be texture mapped as if you were in an aquarium. Outside, you can see more realistic trees; Occasionally, we may see a dinosaur suddenly jumping into the field of view. You can build your theme park on a hill or a landscape with varying elevations (using parametric surfaces). As another example, you can create a small town, as the sample code does. You will create a program that allows the user to explore the town by flying around in it, or by looking at it from the vantage point of an inhabitant. Your town cannot be a dead place: there must be things moving around in it.

What is in your environment, as well as what is happening there is up to you. We hope you will be creative. Make houses, trees, fires, stores, cars, roads, helicopters, construction equipment, people, boats, birds ... What goes on in the environment is up to you - make the cars drive around, draw bridges open and close, construction equipment operate, people or animal moving around...

We hesitate to tell you what to do, since students in the past have come up with some really creative things - we've seen cities with skyscrapers, space cities with flying saucers, a Harry Potter city with flying broomsticks, ... Some things that students did in previous years are shown here. Note that some of the techniques used to create the environment are not discussed in this class, not were they covered in previous semesters. Students pretty much figured them out by themselves.

If this sounds like its arbitrarily open-ended, you have the right idea. Clearly, you could make this as fancy as you want. Obviously, we will try to set our expectations to be only somewhat unreasonable :-) Our goal is to give you the opportunity to demonstrate your competence at writing 3D graphics programs, as well as an opportunity to experiment with some more advanced topics that you think are interesting.

The basic requirements are very simple. You should try to achieve them in a manner that provides flexibility so you can add fancier features as time permits. In terms of which fancier features to implement? You should pick the things that are most interesting to you. We will give you lots of ideas...

We will provide you with a Sample Solution to build on top of. You may choose not to use it, but you must provide its basic functionality (things like navigation, the ability to jump to interesting places, ...).

You will be allowed to work in pairs on this assignment, subject to some rules.

 

2.  Historical Note

Graphics Town has been a popular project for the graphics class for the past several years. Students have enjoyed the chance to be creative, and we (the instructor/TA) like the chance to see lots of cool stuff. The open-ended nature of the project allowed students to spend energy learning / trying out stuff in graphics that they found interesting - including stuff that we don't get to in class.

In 2005, we revised the project. Our goal is to keep the open-ended "learn what you're interested in and be creative" aspect, while being more specific about what our expectations are and making sure that the people take on enough technical challenges.

As in previous years, we provided a sample solution for people as an option to start with. Or this gives a reference how to create complex environment even if you want to write your own code from scratch.

3.  Objectives

The overall goal of this project is to give you an opportunity to explore topics in interactive graphics: how do you make things that look interesting, and be interactive. While some of this is artistic (you need to pick interesting objects to make and good textures/... to look nice), more of it is technical: you need to pick things that can be implemented efficiently and have interesting behavior.

In terms of your grade, effort spent on technical are more valuable. For example, it is better to spend your time making a simple "blocky" car drive around in an interesting way, or to make a simple shaped car out of parametric surfaces, or to light the car in an interesting way, then to carefully model a gorgeous model of a car. (of course, if you want to make model a gorgeous car, implement bezier patches to display its curved body, have it realistically race around a track ... - we won't complain).

If you use the sample code and are concerned about having to be "artistic" - just try to be different than what the provided sample is. For example, don't use the example houses in their regular grid. (An easy way to do this is just avoid using the "SimpleLot" and "SimpleSubdivision" classes).

Some specific things we want you to learn from this assignment (which will explain some of the requirements):

 
  1. To learn how to work within someone else's code - even if that code isn't perfect. (so, we'll encourage you to use my code as a starting point, or at least take a look at it.)
  2. To try out some of the technical topics that we will discuss in class (parametric surfaces, subdivision surfaces, ...) or topics we may not discuss too much in class (particle systems, fractals, ...)
  3. To get some experience with how textures are used to make simple objects look more interesting.
  4. To get some experience with creating geometry for graphics.
  5. To gain experience working with a larger, more complex graphics application.
  6. To gain some experience creating the behavior/motion of graphics objects.
  7. To work with modeling an articulated object.
 

4.  Project Phases

  1. Phase 1 - (April 15) Written Assignment and Partner Check-In. Do the written assignment. Also, if you want to work with a partner for the project, you must send email to the TA  by 11:59pm on the 14th.
  2. Phase 2 - (April 20) Project Checkpoint. Turn in a picture (a png or jpeg screen shot) of your project showing an object that you have made with a texture you have made. If you are building from the sample code, it must be clear from your picture that you've added a new object with a new texture. If you are starting from scratch, you should be far enough along that your project can show an object with a texture.
  3. Phase 3 - (May 3) Final Project. Project demos will be held later that week
 

5.  The Basic Requirements

5.1  Components

Your town must have:

  1. Multiple objects moving at any time (besides the ones in the sample code if you use sample code)
  2. Multiple different types of behaviors (besides the ones in the sample code if you use sample code)
  3. Multiple different types of buildings / scenery (besides the ones in the sample code if you use sample code)
  4. Multiple new textures. Some must be hand painted. Some must not be flat (that is, it must wrap onto multiple polygons)
  5. You must attempt "enough" technical challenges (see the technical challenges page).
  6. You must have an articulated object (that moves its articulation) per person.
  7. You program must work at a sufficient frame rate (which isn't hard since the storm computers are so fast).
  8. You must add something that is effected by the time of day.
  9. You must use at least one type of "advanced" texture mapping, for example, projective (slide projector) texturing, environment mapping, which we discussed in class. Or you can try multi-texturing. Futuremore, you can try bump mapping, or shadow mapping, which we didn't say how to implement them in detail; Here are some online tutorials for bump mapping and shadow mapping. (If you want to pick something not on this list, you may want to check with us to make sure it counts)

5.2  Evaluating aspects

This project will be evaluated primarily on the technical challenges you attempted. In addition to those challenges, your artistic design and creativity will also be taken into consideration.

 

 
6.  The Sample Solution

We recommend that you start with the Sample Solution. You don't have to use it, but you should at least look at it. If you choose not to use it, be sure to have the required features.

 

7.  What to hand in?

As usual, you must hand in everything needed to build and run your program, including all texture files and other resources.

If you work with a partner, please put a single file in your handing directory - a README.txt that says where to look.ting ones). Please order the list so the most complicated/impressive one is first.

  • A list of the behaviors you made. Please order the list so the most complicated/impressive one is first.
  • A list of the technical challenges that you attempted / completed, with a description of what you did and what you used it for.
  • If you used the sample, code, a file that describes any changes you made to the "core" of the system (e.g. other than changing main.cpp and adding new Objects and Behaviors).
  • If you did not use the example code, an explanation of why you chose not to (so that we can provide better sample code in the future), and a discussion of your program's features.
  • You should make a subdirectory of the project directory called "Gallery." In this directory, please put a few JPG pictures of the best scenes in your town. Please name the pictures login-X.jpg (where X is a number). Put a text file in the directory with captions for the pictures. (note: to make pictures, use the screen print and then use some program to convert them to JPG).

     

    8.  Other Resources

    If you want to use advanced GL Features (like MultiTextures), you should use an Extension Manager. Be sure to include it in your handin. Some advice on extensions (and sample code for multi-texturing) can be found here

     

    If you want to use advanced GL Features (like give proper attribution if you appropriate code or models. Also, be sure to include all of the models in the handin.

    If you do use a model reader, remember that you must make some of the objects yourself.

     

    9.  Grading

    Unfortunately, it is very difficult to give a grading procedure ahead of time. Every project is so different.

    The main thing is we'll look at the demos to see how well your technical components work and how cool/complex your world is.

    If you have any questions, please feel free to ask ahead of time.