CS3451: Computer Graphics Course at Georgia Tech
Instructor: Jarek Rossignac, email. Office hour: Thursdays 12:35pm to 1:25pm in CCB commons.
TA: Justin Jang, email. Office hour: TBD
Grader: TBD
Course overview slides.
The course material is posted on the syllabus page, which describes the 15 modules that make up this course and provides links to accompanying slides, reading assignments, and demo applets.
Students are responsible for learning all the material that was either covered in class, or on the posted slides, or in the required reading papers and handouts that are posted on the sylabus page. They are also responsible for understanding the implementation of the example applets provided.
Grading: First midterm=15%, quizzes=10%, second midterm=25%, projects=50% (These modified weights reflect the agreement reached in class on October 20, 2009.)
Extra-credit points will be awarded for outstanding projects. There will be no final exam.
Projects:
Projects are due on the due date before class via email to the TA with subject "3451 Px" where "x" is the project number (for example "01").
The email should contain the name of the student, the name of the partners if this is a group project,
the link to the web page containing the project (Project number and title, authors' names, report in PDF, interactive applet, zip file with the applet, the source code, the data). Students who plan to use a different language for programing the applet should contact the TA in advance. Students must ensure that their interactive applet runs on a web browser over the Internet,
in particular, they must remember to copy the data folder with images, fonts, and models to their applet folder. Note that fonts posted with the starting applets were created on a mac and may not work on other machines. Late submission of projects or missing documentation will result in severe penalty. Copying even parts of a project from another student is strictly forbidden. Publicly available resources may be used, but must be clearly acknowledged and the links provided.
Assignments and exams schedule
Assignment P1 was due Sept 1 before class: Study the class notes on Processing, Geometry, and Curves.
Implement the applet as described in the cyan highlighted sections of Curves. Start with the applet P1. Modify the place-holder (incorrect) implementations marked with "***" in the "action" and "UI" tabs. Make sure that you replace my picture with one of you showing your face clearly in the help pane. When correct, your applet should produce images like the one below. Do not change the GUI.
We will have one more quizz. We will not count your weakest quiz. Your best twoquizz grades will count for 5% each. The next quiz will cover:
- perspective transformations
- arrangement of tangent balls
- light refletions off a Lambertian surface
The second midterm will be on Nov 19. Closed books, no computers or notes of any kind, except for one single-sided sheet of notes that you may bring. It will cover everything we studied until then, including the projects. In particular, it will cover slides from sections 09, 10, and 12.
If you have a conflict with that date (Nov 19), please let the instructor and TA know before Nov 19. (We can make a special arrangement for you to take a final on December 11 from 11:30 to 2:30.
This final will cover all material studied during the semester. It will be closed books. You will be allowed one single-sided cheat sheet as well.)
Assignment P3 has 3 phases with deliverables and deadlines for each phase and has a fourth phase (animation) for extra credit. The complete project submission will be accepted until November 24. Project description: PDF. If you find the project too ambitious, you may attempt to produce a 2D version for partial credit.
Project presentations will be scheduled on December 1 (if a sufficient number of students wish to present) and on December 3. Please notify the TA before Nov 24 if you wish to present your project. If your final numeric grade puts you at the very top of the B group, an excellent presentation could help you pass the bar to an A grade.
Past exams:
Quiz Q01 (10 points): solution
Quiz Q02 (20 points): on Sept 9, solution
Quiz Q03 (20 points): on Sept 23, solution
Quiz Q04 (20 points): on Oct 16, solution
Midterm (150 points): on October 21, solution will be posted here after the exam. Examples of solutions from previous exams:
Midterm 07,
Midterm 06, Homework 1, Homework 2.
01 - Graphic Systems
What students need to know:
How the application communicates with the graphics subsystem (API, states changes, rendering commands, interrupts)
How to write a simple Processing program that lets the user drag a disk on the screen with the mouse and change its color by pressing keys
How to write a simple program that animates the continuous rotation of an ellipse
Processing syntax for variable declarations, arrays, block structure, conditionals, loops, logical expressions, functions
The use of recursion and stack manipulation for creating 3D scenes, as illustrated in the pyramid function of the inspect appletPrinting in the text window and rendering text in the loaded font in the graphics window
How to load an image and use it as a texture on a rectangle
List of input and output devices and modalities, their capabilities and applications
Four strategies for the interactive control of a camera
Examples of approaches for human-shape interaction
02 - Geometry
What students need to know:
The differences between points and vectors: what they represent, allowed operators, effects of transformations
Conversions between polar and Caresian coordinates
Effect, implementaiton, and applications of operators on points and vectors: n(), a(), D(), R(), A(), Left()...
The two formulations of the dot product, its three properties, and its uses for testing and expresing constraints
How to test whether two vectors are paralel or orthogonal using vector operators and also using coordinates
Tangent and normal components of a vector with respect to a direction and the derivation of the formula for the reflection vector
Definition and construction of an orthonormal basis and of a coordinate system (frame)
Formulae for changing coordinate systems
Rigid transformations, their canonical representation
Transformation of points and vectors by a homogeneous matrix
Use of rotate, translate, and scale graphic commands to achieve desired results in 2D
Use of matrix push and pop commands for rendering hierarchical models
Extraction of the rotation angle from a rigid 2D transformation
How to rotate a portion of the scene around a fixed point
Parametric form of a ray and of an edge
Implicit form of a line and of a half-space
Computing the closest point to P on Edge(A,B)
Edge/edge intersection test and the derivation of the formula for edge/edge intersection calculation
Definition of a triangle
Tests whether a triangle is clockwise and whether it contains a given point
Implicit equation and parametric form of a circle
Tests whether two circles, or two disks, intersect
Intuitive understanding, computation, and uses of the cross product for testing parallelism
Computation of the normal of a triangle
Computation of point-to-plane distance in 3D
Computation of line/plane intersection
Formula and intuition behind the mixed product
Use of the mixed prodct for testing whether a triangle is front-facing
03 - Topology
What students need to know:
Why we study topology here
Symbols, notation, and definitions for operations on points and pointsets (union, complement, xor, containment, empty, set definition, quantifiers...)
deMorgan laws
Intuitive understanding of the concept of neighborhoods and its use for defining the boundary, interior, exterior and for testing whether a set is open or closed
Definition of interior, boundary, exterior, closure, regularization
Definition of a connected set, of a simply connected set, and of the components of a set
The difference between a hole and a handle in a 3D shape and the concept of the genus
Manifold and non-manifold points and sets
Definition of a polygon and of a simple polygon
Representation of a simple polygon by a polyloop
04 - Arrangements
What students need to know:
Two algorithms for testing whether a point is inside a polygon (shoot ray, XOR of containment in triangles)
XOR fill of a polygon (algorithm and why it works)
Definition of a convex set and of a convex hull and proof that a stringing is not necessarily a convex hull
How to compute the orientation of a polyloop and identify concave vertices
Why decimating concave vertices does not necessarily produce a convex hull
How to interpret point clouds to produce polygons and dangling edges
Algorithm for computing the best place to live (furthest away from nuclear plants)
Definition and computation of a Delaunay triangle
General position assumptions
Naive algorithm for computing a Delaunay triangulation and its asymptotic complexity
Definition of a Voronoi region anexamples of practical applications
Formula for counting the cells in a planar arrangement of lines
Cost of specifying regions by enumerating cells
BSP tree representation of regions, its construction, and its use for point-classification
Use of BSP for back-to-fron ordering of edge in 2D or faces in 3D
CSG representation of regions, its construction, and its use for point-classification
CSG with 3D primitives, rigid transforms, and scaling
Non uniqueness of BSP and CSG
Definition of a redundant primitive in CSG
Positive form of a CSG and algorithm for obtaining it
05 - Curves
What students need to know:
How to evaluate a point on a Bezier curve for a given parameter value
How to draw a Bezier curve
How to animate a frame on a Bezier curve
How to compute the arc-length of a polyloop
How to uniformely resample a polyloop and its application to animation
How to compute the area of a simple polygon from its enclosing polyloop
Difference between smoothing and subdivision and which one is needed when
Formulae enad their justification for the velocity, normal, acceleration, and jerk at an element of a polyloop
Implementation and limitations of smoothing by successive tucks and their expression in terms of duals
Tuck-tuck smoothing
Implementation of quadratic and cubic B-spline smoothing using combinations of refine and dual
Local control of B-spline curves
Four-point subdivision rule and its advantages/drawbacks over cubic B-spline
Drawing by hand the cubic B-spline and the Four-point of a simple polyloop
06 - Animation
What students need to know:
List several types of animations and give examples of applications
Overall strategy and geometric details for simulating a walking bug in 3D
How to compute and animate a circular motion that interpolates between two frames in 2D
How the circular motion differs from a linear position and angle interpolation, and what are its advantages
Split and tweak smothing of piecewise circular motions in 2D
Computing a spiral motion that interpolates two edges and applying it to animation design
How to detect interference/contact between disks and between polygons
Explain how to use static interference tests for collision and why it may not work
Derive the formula for computing the collision time for disks with constant velocity
Formulae for computing the position of the disks at collision and their subsequent velocities (elastic shock, equal radii and masses)
Algorithm for detecting the interference between two polygons in 2D
Difference between morphing and deformation
Formulaiton of the Minkowski morph and its implementation for convex polyloops in 2D
Definition and construction of the tangent ball morph in 2D between compatible shapes
07 - Morphology
What students need to know:
Difference between distance and discrepancy between shapes (including the love soty metaphor) and examples of their applications
Formulae and algorithms for computing the minimum distance and Hausdorff discrepancy between two point-clouds
Use of smapling for approximating these measures for continnuous shapes
Definition and other terms for of dilation, contraction, and tolerance zone
Formulation of minimum distance and maximum discrepancy in terms of dilations
Limitations of the Hausdorff discrepancy and examples where it underestimates the disparity between shapes
The definition and advantages of the Frechet distance
The definition and advantages of the ball distance
The definition of the cut locus of a 2D shape and the medial axis
The medial axis transform and its use for defining the local and minimum feature size
Distance transform inside a polygon
Definitions of rounding and fileting of shapes by growing and shrinking
08 - Triangulation
What students need to know:
How to represente a triangle mesh using geometry and incidence
How to compute and store a consistent triangle representation
The difference between incidence and adjacency
Corner Table representation
Corner operators and their implementation
Naive algorithm for computing the O table
How to construct a triangle mesh for a regular grid
Recursive algorithm for visiting all triangles of a shell and its use for identifying and orienting shells
Algorithm for identifying which vertices are used by a shell
Algorithm and geometric construction for estimating the normal at a vertex
Formula and algorithm for computing the genus of a manifold shell
Algorithm for point-in-solid test and its justification
How to test whether an edge is concave
Algorithm for computing the border loops of a mesh
Algorithm for computing the exact volume of a solid using the mixed product
09 - Mesh processing
What students need to know:
Overall strategy for computing the distance between a point and a triangle mesh
Algorithm for flipping an edge and why ysing it for smoothing does not work
Algorithm for collapsing an edge
Algorithm for finding the shortest edge
Algorithm for detecting the intersection between two triangle meshes
Definition of geodesic distance and path
Algorithms and geometric constructions for tracing a geodesic path along a curve
Computation of geodesic graph distance and its applications to the isolation measure an to tip detection
Algorithm and details of geometric constructions for mesh smoothing
10 - Light, perception
What students need to know:
Why is it imortant to treat light both as a wave and as a particle
Sort colors according to their frequency
Definition and example of white light
Motivate and explain the gamma correction
Explain what the letters mean in HLS
Explain the tristimulus theory
How many fully saturated hues can an average human distinguish
Compare the human sensitivity to green and to blue
Explain what the Y, X, and Z coefficient of the CIE measure
Explain how to form yellow, magenta, and cyan using additive RGB
Explain why reflected colors should be computed using composition of subtractive colors and not additive colors
Define radience and explain how knowing it everywhere may be used to render the scene from any angle
What happens to light as it hits a surface separating two materials
Formula for computing the mirror reflection of an incoming ray
Spacify the properties of a Lambertian surface and give examples
Specify properties of a specular surface and give examples
Provide the light reflection equation, explain and justify each term
Identify the iris, lense, and retina in the human eye
Describe what the back layer of the retina is composed of and what is its function
What is the feovial region
How many rods and cones does a human have (roughly)
How are rods distributed and what are they good for
How are cones distributed and what are they good for
What is the average human acquity, how is it measured, what does it meean in practice
What horizontal resolution panoramic screen is needed to saturate human acquity
11 - Photorealism and NPR
What students need to know:
Explain how to set up the virtual screen and viewpoint so that the image look correct to the viewer
Explain how to generate models of the rays for each pixel on the graphics window
Provide the overall algorithm for ray-casting
What is the difference between ray-tracing and ray-casting and why does it matter
Explain how to perform hidden-surface removal in ray-casting
Explain how to compute the light reflected by an illuminated visible surface
Provide the algorithm for correctly rendering shadows
Explain why ray-casting plus shadow feelers does not produce correct images
Define NPR and list some of its objectives
List 3 attributes for edge segments and indicates how they may be used to enhance shading
Provide an algorithm for finding the silhouette edges
What is the difference between photorealistic rendering and visualization
12 - Graphics pipeline
What students need to know:
Provide the high level scan conversion algorithm
Compare scan-conversion and ray-casting algorithms and discuss their similarities/differences
List the steps of the graphics pipeline and explain what each one does
What is the viewing frustum and why do geometric primmitives need to be clipped against it
What is the role of perspective projection
Define triangle rasterization and provide a simple but slow algorithm for it
Provide a high-level algorithm for rasterizing an edge and explain which pixels will be turned on and why
Explain how hidden surfaces are removed during rasterization
Explain and justify double buffering
What is the shape of the projection of the moon on your window and why
How to draw a correct perspective projection of a box
What are vanishing points and how many are there
What is the equation of perspective projection and how was it derived
Why is the perspective projection of a triangle a (possibly degenerate) triangle
Why can't we use perspective projection for 3D rendering
What is the equation of perspective transform
Explain z-contention and what may be attempted to reduce its effects
How to draw the shadow of an synthetic vertical pole in an image of 2 real ones
13 - Image-based rendering
What students need to know:
What is texture mapping and why is it so popular
List and explain the steps that a developer must go through to use texture mapping
Discuss different strategies for texture creation
Give examples when texture coordinates can be assigned algorithmically
Discuss several ways of combining texture colors and shading colors
Define the term billboard and explain when it is useful
Explain Phong shading and compare it to Gouraud shading
Explain bumpmapping and suggest good applications. Discuss its limitations.
14 - Acceleration techniques
What students need to know:
List two categories of costs of rendering with a graphics pipeline and suggest experiments identifying which one is the bottleneck
list five performance acceleration techniques and explain what type of cost it addresses and how much speed up may be hoped for
Suggest a test for establishing whether a projected triangle is front facing
Why does the use of short triangle strips improve performance
Why may very long triangle strips not improve performance on contemporary GPUs
Suggest strategies or quick frustum culling
Provide an algorithm for using vertex clusters for mesh simplification and discuss its advantages
Define conservative occlusion testing and explain how it can be used to accelerate rendering
15 - GPU shaders and advanced effects
What students need to know:
List the different stges of the GPU and expain the role of each module
What are shaders and what functionality they offer that was not available in old generation graphic adapters
What is translucency good for
Why are floor shadows important and how can they be easily rendered
Why are floor shadows insufficient
Explain the shadow map approch and its limitations
Explain why soft shadows are desired and suggest a simple implementation that approximates them
List several realistic visualization effects that can be programed efficiently on the GPU
P01, due Tuesday August 26: Animation of student's photo and name. Suggested starting applet.
In class, students are arranged into groups of 2, write the common specification for their second animation.
The rest of the projet is individual, even though students in a team can help each other get Processing to run/export, and to edit/post their personal project page (PPP).
Each student should edit the provided code to create two new animations using his/her name and picture.
The first animation should be played when the program starts and each time SPACE is pressed. The picture should start as a small dot in the middle of the screen and grow while rotating around its center while remaining parallel to the screen (2D rotation or rotation around z direction). The name should rotate around its center, but the rotation should not keep it parallel to the screen, but have it rotate in 3D. It should end in a configuration where the name and face of the student are clearly visible and centered on the screen, the name below the picture (as shown in the image below).
The second animation should follow the common specification delivered in class. It should show and hold its initial configuration while the mouse button is pressed. That initial configuration should depend on where the mouse is. The second nimation should be played each time the user releases the mouse button. It should produce a more complex ("amazing", "artistic"...) 3D animation of both text and images, including non-linear dynamic effects.
Each animation should last about 5 seconds. Your personal web page should contain your version of the team specification for animation 2 (as text or link to PDF file). You are welcome to edit it for conciseness and precision, but it should remain true to what your team has produced in in class.
Grading: 10 pts for replacing my name and photo with yours, for posting the running applet online along with the source code links, and for emailing the TA on time. 10 points for correctly implementing the first animation as described above (please ask in class if you do not understand the script for that animation). 10 points for programming an interesting second animation and posting a clear specification for it that is true to the original script turned in class. Up to 15 extra credit points if the specification is extremely ambitious or original (for example if the animation is physically realistic or funny), if it is formulated in a concise and precise manner, and if it is implemented correctly.
P02, due Tuesday September 9: Edge/Triangle intersection. Suggested starting point Processing applet. Solution.
Produce and post an interactive program where the user can drag the vertices A, B, C, D, and E as your program draws the border of the triangle (A,B,C) in green and the edge (D,E) in blue. At each frame, your program should also draw in red (on top of the triangle and edge) the intersection between the edge and the triangle (the triangle is the enclosed face, not only the border). Note that the intersection may be empty, a point, or a line segment.
For extra credit, draw in red the part of the edge that is in the interior of the triangle and in orange the part that is on the boundary of the triangle (see image below). Use an epsilon tolerence to detect near-singularities and treat them as singularities (vertex on vertex, vertex on edge, collinear edges). For the extra credit, you should to look at how these overlapping cases are handled in the applet provided for the edge/edge intersection case.
Grading:
- 10 points for emailing the TA and posting the project page on time and for producing a project page with a title and project number, author's name linked to the author's web page, author's picture, short description of what the applet does and how to use it, an interactive applet running where the 5 vertices are may be editred by the user and the edge and triangle are drawn at each frame.
- 10 points for implementing the intersection calculation and rendering it, so that the result is always correct (neglecting round-off erors), and for posting a short description of the solution you have implemented.
- 10 points for correctly describing and implementing the use of a tolerance to force singularities, which should make it easier for the user to align the shapes so that the edge is colinear with one edge of the triangle or a vertex is snapped onto an edge
- 10 extra credit points for computing correctly and distinguishing in orange the portion of the edge that lies on the boundary of the triangle and for describing briefly how this was implemented
P03, due Tuesday September 30: Interactive Sumo Game. Teams of 2. Suggested starting applet: improved sumo (original sumo)
Design, implement, debug, document, and post and interactive video game based on a simplified version of sumo where the fighters are disks in a circular ring.
- Download the suggeste sumo applet. Do not change anything except the AIred and AIblue code. This way, all teams have the same constraints (green is twice stronger and heavier than red and blue)
- For one-on-one games (playes==1), implement AIred that is hard to beat.
- For one-against-two games (players==2), implement AIred (which may be different from the previous one) and AIblue that work as a team against green.
- Document your AI strategy by providing a high level description of what it is supposed to do and the non-obvious geometric and algorithmic details (geometric formulae, pesudocode).
- List all sources of inspiration (papers, web sites, books, courses...)
- Option for extra credit (required for teams of 3): Provide a separate web page with an applet where two human players play against each other in real time through an Internet connection (players==1). See P2P.zip for instructions on installing a server and for a demo applet of a client that let's you exchange user imput between two computers.
The project web page should have a title (Sumo: Project P03 for CS3451 (Fall 2008) taught by Jarek Rossignac), list the members of the team and show their photographs. It should have your improved version of the sumo applet running with simple instructions for how to play and for starting a new game. (Add your names in the help text.) It should have a link to the zipped file containing: the Processing source code .pde files, font used, data files if any, and the PDF paper (but not the executable or java applets, so as to reduce size). The project page should also have a link to a short (1 or 2 page) PDF file with proper title, authors... explaining how you detect the collision, and how you compute the velocities after collision, how you have implemented the AI, and (optionally the remote connection). Providing all of the above will bring you up to 60 points (depending on the AI, and on the quality of the paper). Additional credit (up to 30 points) for one or several things like: doing an excellent AI for a team of fighters and providing the remote player option for two (or even three) human players, adding sound (or visual) effects for collisions and when points are scored, adding textures, allowing for the fighters to have different (randomly selected) weights for each game, or providing a 3D version. Other useful links: Bouncing cars, Crazy cars, bad collisions, TRING, physics for full dynamic in 2D and demo,
P04, due Tuesday October 28: Morphing between polyloops. Individual. Suggested starting applet: polymorph. Note that you are NOT required to use this applet nor even Processing, as long as yuo can post the running applet online.
Change the polymorph applet so that when the user presses 'b', it computes smooth trajectories of the control points. Then, when the user selects to see all the frames superimposed (toggle 'f') or an animation that circulates through the frames and renders the current one (toggle 'a'), your program should render the smooth version(s) of the intermediate frame(s). You should apply the four-point subdivision 5 times to obtain the sampling on the trajectories of the control points and to render the smoth (refined) frames. Your web site should post the revised applet and a brief explanation of: (1) how the four-point subdivision works and (2) how you have used it to produce the animation. You should use your program to design your own animation and post its control key-frames in the data folder so that it can be played in your web appplet.
Extra credit: (1) Implement a linear version, which may be selected by setting the animation style to 1. (2) Notice that when consecutive frames have very different orientaitons, the four-point interpolation may squash the shape during the interpolation. Propose, implement, and explain another interpolation scheme that solves this problem. (3) Paint a texture in the animated polyloop (4) Load a photograph with several faces. Use the drawing tool to lasso the faces one by one. Then, use your animation to move a face that interpolats the lassoed ones while morphing (cross-fading) between them. (5) Use the picture making facility ('X') to capture hte frames of your animation and make a video of it and post the video. (You may want to reduce window size to keep the video small.)

P05 (Bulge). In teams of 3 or less. Due Nov 25 before class (post and email TA). Demos on Dec 2 (submit request by Nov 25).
You may (but do not have to) use the code provided on the /demo applets page. You do not have to use Processing. You may use publically available code (such as the one provided by CGAL for the constrained Delaunay triangulation), but if you do so, you must clearly state what code you are using, where you got it from, how you interfaced with it.
(1) Provide closed-loop curve-editing capability (drawing when the 'd' key is pressed or editing/inserting control points) and the option to resample the current polyloop P with a user-controlled number of evenly distributed vertices (use keys '<' or '>' to double or half the vertex count).
(2) Compute and show the constrained Delaunay triangulation of the interior of P. Use a sufficiently dense resempling to ensure that each Delaunay triangle is either in the interior or in the exterior of P. Keep only the triangles in the interior of P.
(3) Compute sample points on the MAT (Medial Axis Transform) of P. Store their location and radius. Show them by first displaying the corresponding (filled) disks (which should nearly fill the interior of P) and by overlaying in a different color the centers of these disks (medial axis sample points).
(4) Spray random points in P ( use ',' or '.' keys to double or half the number of interior vertices). Compute the constrained Delaunay triangulation of the union of the vertices of P with these interior vertices.
(5) Store the triangulation as a corner table (compute the V and O tables) and verify that all corner operators work (use keys 'n', 'p', 'o', 's' to navigate the mesh...)
(6) Use Laplace smoothing to distribute the interior points evenly (key 'S'). This is a 2D redistribution of the interior vertices, which may not yield an even distribution of the vertices on the final 3D bulge surface. Note that you may also execute a smoothing later (once you have constructed the 3D mesh) and discuss the additional benefits/drawbacks of doing it in 3D.
(7) Bulge the interior points into 3D (when key 'b' is pressed), setting their height (z-coordinate) to the maximum of their height at containing MAT balls. It is easy to compute the height of a ball at some point Q that it contains. Implement this using a loop on all balls (MAT samples) for each interior vertex.
(8) Make a mirror image of the mesh (when key 'm' is pressed), stitch the two meshes together into a watertight mesh (by adding the interior vertices and the reoriented triangle of the mirror mesh and recomputing the O table).
(9) Save the bulged mesh to a file ('W' key). Load a saved mesh (key 'L'). Integrate with a 3D view manipulation so that the user can inspect the mesh from all directions. Support an automatic animation (key 'a' turns animation on and off) that rotates the bulged mesh in 3D (around the y-axis).
(10) Compute the isolation measure (key 'I') of that bulged mesh and color code the triangles accordingly (lighter tips).
(11) Provide help text (' ') explaining how to use the program and a report describing the functionality and how it was implemented (include title, class, date, authors, head-shots, references to materials used and other sources...). Specifically include references to TEDDY and PLUSHIE and discuss the similarities/differences between your approach and the one used in TEDDY and PLUSHIE for computing the bulge.
(12) Post web page where users can draw their own curve and view the 3D bulged mesh. Include title, link to class web page, author's names and headshots, links to the authors' home pages, the report, links to references and software used, and a zip file with the whole directory/folder, including the html web pages, the applet, the source code, the data, the report).
Optional (extra credit: up to 30%):
(13) Merge the bulge project with a 2D animation tool that automatically computes the frames of a cyclic animation from a series of keyframe polyloops. Apply the bulge to each frame of the 2D animation. Save the results. Play the animation (by swapping meshes at each frame) as you rotate the model automatically around the Y axis (key 'a').
(14) Design a cool 3D animation and post an applet that loads and play it when it is started.
(15) Make a short (200 frames, 400x400 resolution, standard format) video of your animation and include in your web page and in the zip file.
Links to videos: TEDDY, PLUSHIE. Links to papers: TEDDY, PLUSHIE
Useful code: Circum-circle and centers, Naive Delaunay, Mesh viewer and Corner Table, Delaunay/Voronoi, Bulge, Stitching