CSCI 441 - Computer Graphics

Fall 2020 - Midterm Project - Enter the Park



Canvas | CS @ Mines | Mines | Piazza
|   Home |  Assignments |  Leaderboard |  Schedule |  Resources   |
Blue Teapot2015: Asgard Green Teapot2016: Mount Olympus Red Teapot2017: Aaru Park Grey Teapot2018: Findias Speedway White Teapot2019: Hanan Pacha Black Teapot2020: Onogoro Island

This assignment is due by Thursday, October 15, 2020 by 11:59pm.

After screwing in the last bulb, you head back to your track. However you find construction tape blocking the entrance and a permit displayed next to your sign. Wonderful! Construction has begun! You get closer to read the fine print of the permit.

29 September 2020
Onogoro Island

PERMIT FOR CONSTRUCTION OF RAINBOW ROAD


Please be advised that construction has begun on the latest track at Onogoro Island - Rainbow Road! No access without express permission from Amaterasu. Stay clear of the area until work has completed.

Rainbow Road?! What Rainbow Road? This is where my track is supposed to go!

You storm off looking for the man that seemed to always be around, until now. There seems to be a commotion going on near a temple so you head that direction. Approaching nearer, there is a bright glowing orb hovering above. You don't recall seeing that before.

As you push through the crowd and get near the front, the man is trying to calm everyone down. Luckily, he sees you and grabs you by the arm.
Quick! They'll eat me alive out here. We must head inside. I've been waiting for you. Amaterasu wants to see you right away.
Perfect. Maybe now I'll find out what's going on.

As you move through the temple, you can no longer hear the sound of the crowd outside. You don't remember making any turns, but you feel that you've been walking too long compared to the size of the temple. Are you going underground?

The man stops abruptly and you nearly walk into his back. He points to a sign on a narrow wooden door.


Lasciate ogni speranza,
voi ch'entrate.

He nods at you and swings the door open motioning for you to enter. You proceed.


Part I - Build Your Coaster


Quickly scanning the room, there are nearly forty other people gathered - and you saw them around the park as you ran through. Why are they here too? You find the last remaining open seat and wait for whom you assume is Amaterasu to speak as they have already made their way to the podium.
"We have asked all of you here as you all have the same quest - to make Onogoro Island the most successful theme park. For years we have been trying to win a Spiny Shell but our attractions were never good enough. Alone, none of you will ever have the resources to build the one great ride. But together, perhaps you can find a way to make the fastest and best track on the planet. Here, take one of these flyers and start right away. Resources are limited so you must hurry. We wish to open Onogoro Island in a few months time so any delay will hinder our chances for the award."
You quickly take one of the flyers as they go by and begin reading:
The Spiny Shell has a series of jugding criteria. There are four in all, each testing a different skill you have learned in your travels. You must choose some of your fellow Heroes to join you. Onogoro Island has thirteen pit crews and each has enrollment slots available. Each pit crew can accept three Heroes.

The first part of your midterm project is to assemble into teams. Materials are centrally located, so you may only partner with other characters within your family (Tokugawa or Yamato). Our class will have eleven teams of three and two teams of four (both for Tokugawa). Once you have formed your team, one member of your team must email the following to the instructor by FRIDAY, OCTOBER 02 11:59PM:
  1. The Members of Your Team
  2. Your Pit Crew Name
  3. Your Family
For the midterm project, you will create a world for all of your Heroes to move around in. Read on to understand how everything fits together.

The actual midterm project is comprised of several smaller parts, each focusing on one of the topics covered to this point. The requirements for each section are described below.
Section A - 3D Drawing & Animation

As before, your Heroes must be made of solid 3D Objects. Beyond the ground and Heroes, you must also have two different types of objects scattered around your world.

Whenever any of your Heroes are moving, they must be animated while they move. The other two objects may be stationary or could be animated (think a tree swaying in the wind for instance).


Section B - Cameras & Viewports

Users will be able to experience your program from one of many view points:
  1. From an arcball camera that can rotate around and follows a single Hero
  2. From a free cam that can move about the scene
  3. From a first person camera attached to one of your Heroes
The user should be able to toggle between camera modes through different key presses. When the first person point-of-view camera is turned on, it must appear as a picture-in-picture viewport within the window. Feel free to add additional cameras beyond the three listed (Sky cam, Side-scrolling cam, Third Person cam, etc.)

In addition to being able to select which camera view to use, the user must be able to select which Hero to move. The arcball cam will follow this hero and the first person cam will display their point of view.


Section C - Shaders & VAOs

You must be using VAOs for all of your objects. Additionally, you will need to create custom shaders to implement Part D. The shaders and VAOs will need to work seamlessly together and should run without error.


Section D - Illumination

You will need to implement the full Phong Reflectance Model using Gourad Shading. This will be implemented through a directional light, a point light, and a spot light. You must have at least one of each type of light. All of your lights will be additive and exhibit attenuation (except the directional light). Be sure to choose nice looking colors for each of your lights and your materials.

Scanning the room, you instantly know who should join you in your pit crew. You pull them aside, speak for a few minutes, and it's agreed. You three shall begin preparations immediately.


Part II - Website


Update the webpage that you submitted with A4 to include an entry for this assignment. As usual, include a screenshot (or two) and a brief description of the program, intended to showcase what your program does to people who are not familiar with the assignment.


Part III - Presentation


To demonstrate the features and world you have created, each team will submit a video of your program running. It needs to clearly demonstrate each of the three different light types, the different camera types, and your three heroes.

By the end of lab on October 16, each hero will view and provide feedback for each video. At the end, each hero will vote for their favorite pit crew that should win the Spiny Shell.

!!EXTRA CREDIT!! For extra credit, have your video generated by using an external file. We will model our file after the md5camera file format which implements a free cam model. At the start of your program, the user needs to be prompted which camera file they wish to open. The file is then formatted as follows:
n
eyePos1.x eyePos1.y eyePos1.z camDir1.x camDir1.y camDir1.z upVec1.x upVec1.y upVec1.z fov1
eyePos2.x eyePos2.y eyePos2.z camDir2.x camDir2.y camDir2.z upVec2.x upVec2.y upVec2.z fov2
...
eyePosn.x eyePosn.y eyePosn.z camDirn.x camDirn.y camDirn.z upVecn.x upVecn.y upVecn.z fovn
    
The first line states the number of frames that make up the camera animation. There then follow n lines. Each line is made up of the following information:
  • The first three values correspond to the camera's eye position
  • The next three values correspond to the camera's direction as a cartesian vector
  • The next three values correspond to the camera's up vector
  • The final value is the camera's field of view for our projection matrix.
We'll need to load the file into an array that holds all of our camera parameters. When ready to run the camera animation, every time through our render loop we'll use the next set of camera parameters from the array. This will result in an automated fly through your world.


Documentation


With this and all future assignments, you are expected to appropriately document your code. This includes writing comments in your source code - remember that your comments should explain what a piece of code is supposed to do and why; don't just re-write what the code says in plain English. Comments serve the dual purpose of explaining your code to someone unfamiliar with it and assisting in debugging. If you know what a piece of code is supposed to be doing, you can figure out where it's going awry more easily.

Proper documentation also means including a README.txt file with your submission. In your submission folder, always include a file called README.txt that lists:
  • Land Name / Land Members
  • Assignment Number / Project Title
  • A brief, high level description of what the program is / does
  • A usage section, explaining how to run the program, which keys perform which actions, etc.
  • Instructions on compiling your code
  • Notes about bugs, implementation details, etc. if necessary
  • NEW: A rough distribution of responsibilities / contributions of each student
  • How long did this assignment take you?
  • How much did the lab help you for this assignment? 1-10 (1 - did not help at all, 10 - this was exactly the same as the lab)
  • How fun was this assignment? 1-10 (1 - discontinue this assignment, 10 - I wish I had more time to make it even better)


Grading Rubric


Your submission will be graded according to the following rubric.

Topic Percentage Requirement Description
3D Drawing & Animation 10% Heroes are animated & comprised of solid 3D Objects. Scene is comprised of ground and other scenic objects.
Cameras & Viewports 35% Arcball camera follows Hero and rotates correctly; user can control rotation. Free camera is correctly implemented, can move around the scene, and is user-controllable. Camera from Hero's point of view works correctly; it is attached to the Hero and looks along the Hero's direction of movement.

First-person camera view is placed in a separate viewport. User can toggle between cameras through use of a keypresses. User can toggle between Heroes to follow through keypresses as well.
Shader & VAOs 10% Vertex and Fragment Shaders compile and link without errors. Objects in world created using VAOs. Shaders and VAOs interact correctly.
Illumination 35% Phong Reflectance Model implemented with Gourad Shading. All three light types implemented (directional, point, spot) and are additive. Attenuation applied as appropriate. Appropriate light colors and material colors used.
Submission, Presentation, & Team Reflection 10% Submission includes source code and README.txt. Source code is well documented. Webpage named <HeroName>.html submitted and updated with screenshot from latest assignment. Submission compiles and executes without error. Video is of high quality and equal division of work is reported by team members.


Experience Gained & Available Achievements


Assignment Attribute
Assignments +150 XP
Web Attribute
Web +150 XP
Camera Crew
Camera Crew
???
???
???
???
???
???
???
???


Submission


When you are completed with the project, zip together your source code and README.txt. Name the zip file, PitCrew_MP.zip. Upload this file to Canvas under MP Source Code. Only one team member needs to submit the project source code.

Upload the generated video, as an mp4, to Canvas under MP Video. Name the video PitCrew_MP.mp4. Only one team member needs to submit the project video.
Every team member needs to submit their individual website under MP Website. Name the zip file HeroName_MP.zip.


This assignment is due by Thursday, October 15, 2020 by 11:59pm.
Last Updated: 09/29/20 16:28
Creative Commons License
Any questions, comments, corrections, or request for use please contact jpaone {at} mines {dot} edu.
Copyright © 2015-2020 Jeffrey R. Paone