For the recommended final project, you will implement a roller coaster simulation. We will provide no additional base code for this assignment, but you are free to use any of your previous project code.
Unlike previous assignments, you may work in groups of 2. However, be aware that group projects will require additional work, and will be graded more strictly in general. Total points for group assignments are split evenly between the two partners.
The project grading will be performed face to face. During the grading, we will ask you to show us each part listed below independently. To do this you may either include special toggle keys in your program to switch between parts or implement each part as a separate program.
(We will schedule the times for the grading demos in the next few weeks.)
The Project is broken down by points below. It is graded on a 100 point scale, which is only relevant to this assignment. The project is still worth a total of 16% of your grade.
Roller Coaster - All Students (100 points)
- 20 points -
Create a C1 piecewise cubic curve from an ordered list of control points. The curve may be implemented via bezier segments, b-splines, or catmull-rom basis. If you use bezier segments, you must introduce appropriate intermediate points to ensure C1 continnuity. Include a keystroke toggle or a separate program to show off your curve and its control points, displaying at least C1 continunity.
- 20 points - Create full coordinate frames (in Matrix form) along the curve at any given 't' value. The lecture notes from Tuesday, February 28th, discuss the technique. Create functions to draw each frame, using three lines for each of the A,B, and C axis and making sure the frame is centered at the proper location.
A piecewise cubic curve should also have a roll parameter to control the roll of the frame on the curve. Create a separate keystroke toggle or program to show the intermediate frames calculated at a bunch of 't' values along a piecewise-cubic curve.
- 30 points - Create an extrusion along a cubic curve. Given a piecewise-linear cross section and a bezier or b-spline curve, step along the curve using the coordinate frames to position each successive cross section. Tesselate the resulting surface to make a solid, smooth extrusion. Be able to show us an extrusion for a single cubic curve and cross section.
- 20 points - Using the multi-segment curves and extrusions, build a complete roller coaster track.
You may build the entire track as a single piecewise-cubic curve, or you may build it from separate curves. If you use separate curves, the track segments should meet seamlessly. The track should contain variations in elevation
and some variations in roll (e.g, banked corners).
- 10 points - Model a roller coaster car and add it to your roller coaster. The roller coaster should follow the track, and include wheels that spin. They don't necessarily have to spin perfectly as the car rolls along the track, or touch the track at all times, but it should be close.
Include keystrokes to start/stop the car and adjust its speed, and also to switch between the default camera that views the whole scene to a camera showing the forward view from a rider in the car. (This type of camera setup is known as a "POV" camera, meaning that it shows the Point-Of-View of an actor or participant.)
Track and Cross Section Editors - Groups Only (100 points)
If you work in a group, you will be required to design 2 editors in addition to doing the roller coaster. The first editor will be a 2D cross section editor; the second, a 3D track designer. We will require that you use these editors in designing your roller coaster.
- 20 points - Mouse input. Both editors should include some form of mouse input. At a minimum the mouse should be used to select different elements and move object around. How you choose to implement this is up to you. Also, you must include some type of selection highlighting in both your editors.
- 10 points - Include some type of save and load features in your 2D and 3D editors and your final program. This can be very simple. For example, you can just save and load from a hardcoded file name instead of asking the user for one. You are also free to store information in any format you like.
- 20 points - Add functionality to add and remove 2D and 3D points from both editors.
- 20 points - Design the 2D cross section curve editor. You should be able to make a piecewise linear cross section using your editor and save it to a file. Your roller coaster program should read in that file and create the track extrusions from it. We'll ask for a demonstration of this when grading.
- 20 points -
Design a 3D curve editor for the piecewise-cubic roller coaster track. If the track is a single curve, it should be C1 continuous by construction (as per part 1). If you will build the track from multiple curves, the editor should ensure that curves meet with C1 curvature. You should be able to interactively add/delete/move the control points of the curve(s), and save them to a file. The roller coaster program should load the file and use it to generate the final track.
- 10 points - Augment your 3D editor to show the actual track extrusions. You'll need to include cross-section loading capabilities.
Also, it should include an adjustable roll parameter per control point
to allow you to adjust the lean of the track, and if you build the track using separate curves, to allow you to enforce that the extrusions meet seamlessly.
Technical bells & whistles: (15 points max, 30 for groups)
Here are a few suggested technical bells and whistles. If you're working in a group, your B&W points will be split between you.
- Reparmeterize the track based on arc-length.
- Put a loop in your track. The camera inside the car should work smoothly during the loop.
- Add support beams for the coaster.
- Create multiple cars for your coaster.
- Add headlights.
- Add cars that gather at the bottom, slowly progress up a hill, and then travel through the track and back to the bottom.
- Put models of people in the cars
- Take a photograph of the people in those cars as they're rolling down the first hill.
Style bells & whistles: (10 points max, 20 for groups)
Computer graphics is all about making images and interactive programs that look good. It's not just about programming. Artistic talent goes a long way. To honor that, we're giving up to 10 additional style points to those of you who show us some real artistic effort in this assignment. We're leaving this B&W wide open, so be creative!