CSCI 441 - Computer Graphics

Fall 2018 - Midterm Project - Super Mario Kart



Canvas | CS @ Mines | Mines | Piazza

picture
|   Home |  Syllabus |  Assignments |  Leaderboard |  Schedule |  Resources   |
Blue Teapot2015: Asgard Green Teapot2016: Mount Olympus Red Teapot2017: Aaru Park Grey Teapot2018: Findias Speedway
This assignment is due by Thursday, October 11, 2018 by 11:59pm.

The time has come and you've arrived at Findias Speedway. With your vehicle perfectly tuned and you finally dithced that faery, you pull into the pits and pass under a banner.


Fág gach dóchas,
tú a théann isteach.

You proceed ahead and find your banner already displayed at your stall.


Part I - Watch Out For Banana Peels!


You head to the infield and see a group gathering. Quickly scanning the crowd, there are nearly forty other people gathered. You knudge your way to the front and begin listening.
"We have asked all of you here as you all have the same quest - to win the Spiny Shell Cup. For years we have been trying to find a racer with the speed and ability to take on the other racers. You will need to first challenge each other and the fastest will advance.

Here, take one of these flyers and start practicing right away. Time is limited so you must hurry. The Spiny Shell Cup is only a few weeks away."
You quickly take one of the flyers as they go by and begin reading:
The Spiny Shell Cup 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 practice with. Findias Speedway is comprised of eleven circuits and each have enrollment slots available. Seven clans can accept three Heroes while the remaining four will accept four Heroes.

The first part of your midterm project is to assemble into clans to race against each other. You may only race against other heroes that are competing towards the same trophy (Lia Fáil or Coire Ansic). Our class will have seven teams of three and four teams of four (two each for Lia Fáil and Coire Ansic). Do not assume you are the team of four, contact the instructor first to ensure the team is still available. Once you have formed your team, ALL members of your team must email the following to the instructor by TUESDAY, SEPTEMBER 25 11:59PM:
  1. The Members of Your Team
  2. Your Clan Name
  3. Your Trophy
For the midterm project, you will create a race track (Hills/drops, turns, etc.) for your Heroes to ride on. Two of your Heroes will be automatically racing along the track while the third Hero is free to explore the world you create. 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 - Bézier Curves & Surfaces

Previously, we used a grid in the XZ-plane to denote our world. Now, you are to use a Bézier Surface as your ground. This curved surface will now have changes in elevation and be more interesting to move around than a flat grid. You will need to specify the 16 contol points that make up your world (control point specification is described below in Section D). If you wish, you may use more than one Bézier Surface to give more detail to your world (if you do use multiple surfaces, make sure they are C1 continuous at the mesh point). There needs to be at least one Bézier Surface, but you are encouraged to use more that meet along their seams to create more exciting terrain. Your Surface will be solid (i.e. made up of triangles) so be sure to traverse your parameters correctly.

Choose one of your Heroes to be the wanderer. This Hero will be controlled by the WASD keys and can walk around your Surfaced world. Three key points for the Wandering Hero movement:
  1. As the elevation changes, the Wandering Hero should follow these elevation changes. Specifically, the Wandering Hero should follow the curves of the Surface and always stay "on top" of the Surface.
  2. The Wandering Hero should follow the slope of the Surface. As the Wandering Hero changes direction and moves uphill/downhill, the Wandering Hero should always be oriented along the normal to the Surface at that point.
  3. The Wandering Hero is confined to the surface, i.e. the Wandering Hero cannot move off of the Surface and bounds checking must be performed to ensure this.
The other two Heroes will be moving along Bézier Curves. You will design a roller coaster track that the other two Heroes will travel along. The overall curve will be specified by a control file and must be closed (the start point and end point must be the same) and therefore C0 continuous. The curve must also be C1 continuous, you should ensure the points provided will be C1 continuous and you do not need to enforce these continuities in program. The two Heroes will travel along the curve in different manners.
  1. One Hero will travel along the curve at equal parametric intervals. This means the Hero will advance dt units, where dt is step along the parameter t.
  2. The other Hero will travel along the curve at equal arc length intervals. This means the Hero will advance dS(t) units, where dS(t) is a step along the curve's length. Read these slides and this article detailing the process.
These two Heroes will move automatically as your program runs. They will also be traveling at different rates so you should see them pass and catch up to each other. Each Hero should be oriented with the tangent of the curve, so they are always facing the direction of motion. Feel free to bank your turns and add in a roll component, in addition to the pitch and yaw you will already be doing.

HINTS:
  • You are encouraged to use your Hero + Faery from A4.
  • You may want to make a generic virtual Hero class and then have each of your individual Heroes inherit from the parent Hero class. Put these into a HeroBase.h and <Hero1>.h, <Hero2>.h, etc. files.
  • You may want to use a display list for your terrain.


Section B - 3D Drawing & Animation

As before, your Heroes should be made of solid CSCI441 3D Objects. Your Bézier Surface must be comprised of triangles or quads. Your track must also be made of solid 3D objects. Beyond the ground, track, and Heroes, you must also have two different objects scattered around your world. Their locations will be specified by the control file (again, see below).

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 C - 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 be able to select which camera view to use, the user must be able to select which Hero to follow for the arcball cam or first person cam.

If you would like to have the user watch two Heroes move along the track and control the Wandering Hero at the same time, consider creating a split screen in your application so the user can interact with both views simultaneously.


Section D - File Format

The format of the World File you will read as input is up to you to define. In your file format, a designer must be able to specify the location of control points, as well as the location and type of objects to be placed in your scene. An example format might look like:

<number of Bézier Surfaces for ground>
<sixteen control points for each surface>
...
<number of control points for Bézier Curve track>
<control point x> <control point y> <control point z>
...
<number of objects>
<object type> <object x, y, z> <object orientation x, y, z> <object size>
...

As stated above, your file format is up to you to define; however, you must be able to place at least two different kinds of objects, which can be as simple as CSCI441 3D Objects, or more complicated, like a flag or a tree. You must describe your file format in your README.txt file. To demonstrate that your program can read in World Spec Files correctly, include two example files with your program. They must each utilize the full functionality of your file format (i.e. must each contain objects placed in the scene and must each specify control points for a valid track). They should be visually different and a user can distinctly tell a new world has been entered.

Scanning the room, you instantly know who should join you in a clan. You pull them aside, speak for a few minutes, and it's agreed. You three shall begin preparations immediately to create the ultimate race team.


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


During lab on October 12, each Clan will present their world, Heroes, and track. During this time, the other Clans will be critiquing your project (by filling out a scoresheet) and at the end everyone will vote for their favorite Clan that they won the race.


Documentation & Submission


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:
  • Your Name / email
  • Clan Name / Clan 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 description of the file format that your program reads as input
  • 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
Bézier Curves & Surfaces 45% Track is closed (end point = start point), C0 continuous, & C1 continuous. (This doesn't need to be enforced in-program, as long as input control points s pecifiy C0 & C1 continuous curves.)

One Hero moves by arc-length parameterization and moves at a constant speed regardless of control point spacing. The other Hero moves by equal parameter steps.

Terrain is comprised of Bézier Surfaces. The Wandering Hero can be controlled and moves around the terrain properly.
3D Drawing & Animation 10% Heroes are animated & comprised of CSCI441 3D Objects. Scene is comprised of track and other scenic objects.
Cameras & Viewports 25% 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.
File I/O 5% File format is documented in the README.txt file. A third-party should be able to write a World Scene in your format based on your documentation. File format supports two different types of objects that can be placed in the scene and objects are correctly placed and rendered in the scene. Two non-trivially different example files are included. Each example fully utilizes the file format (i.e. places objects of each type).
Submission, Presentation, & Clan Reflection 15% Submission includes source code, Makefile, and README.txt.
Source code is well documented. Webpage named <HeroName>.html submitted and updated with screenshot from latest assignment. Submission compiles and executes in the lab machine environment. Presentation 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
Banana Split
Banana Split


Submission


Please update your Makefile so it produces an executable with the name smk. When you are completed with the assignment, zip together your source code, Makefile, and README.txt. Name the zip file, ClanName_SMK.zip. Upload this file to Canvas under SMK. Only one team member needs to submit the project source code.

Every team member needs to submit their individual website under SMK Website. Name the zip file HeroName_SMK.zip.


This assignment is due by Thursday, October 12, 2018 by 11:59pm.
Last Updated: 10/11/18 14:58


Valid HTML 4.01 Strict Valid CSS! Level Triple-A conformance, W3C WAI Web Content Accessibility Guidelines 2.0