You will implement the Catmull-Clark subdivision algorithm to smooth your meshes, along with a few other mesh structure alteration functions.
None.
Maintain a log of all help you receive and resources you use. Make sure the date and time, the names of everyone you work with or get help from, and every URL you use, except as noted in the collaboration policy. Also briefly log your question, bug or the topic you were looking up/discussing. Ideally, you should also the answer to your question or solution to your bug. This will help you learn and provide a useful reference for future assignments and exams.
Before you begin the programming portion of this homework assignment, read and answer the following conceptual questions. Your answers should be written in your readme.txt file along with your documentation of your project.
Add a button to your GUI that allows the user to add a new vertex to your mesh, given one half-edge as input. The vertex should be at the midpoint of the edge. We recommend you implement this function before Catmull-Clark subdivision, since you can re-use it within the subdivision function.
Add a button to your GUI that, given a single face in your mesh, triangulates the face (you may assume the face is convex). You might consider beginning with a function that only triangulates quadrangles, then expand that function once you confirm it works.
Add a button to your GUI that allows the user to subdivide any given polygon mesh using Catmull-Clark subdivision. We recommend breaking up the subdivision into testable steps, such as adding the new centroids and edge vertices first, then moving the original vertices inward, then connecting these vertices with half-edges. Writing a separate function to "quadrangulate" a face given the new vertices may be helpful.
You'll know your subdivision is working properly if a cube converges to a spherical shape when you subdivide it multiple times. If you can subdivide the supplied cow OBJ file within 10 seconds, you've done very well!
Below are some expected vertex coordinates on a 1x1x1 cube after one iteration of subdivision:
Add a button to your GUI that allows the user to extrude a selected face along its geometric surface normal. Each edge of the face should become a quadrangle that connects the extruded face to the faces it originally touched. You may choose to hard-code the distance by which a face is extruded, as long as this distance is non-zero.
Write a planarity test (using a given epsilon tolerance) that checks a face and automatically calls your split face operation to triangulate it when it is no longer planar.
Allow the user to set specific faces, edges, and vertices as "sharp" before subdividing a mesh. The effect of "sharpness" depends on what has been tagged as sharp:
Allow the user to set a "sharpness" value between 0 and 1 for any mesh component that has been tagged as sharp. This value determines how "sharp" that component will be after subdivision, which is a simple interpolation of its fully sharp position and its fully smooth position.
Decide upon some other mesh alteration operation, such as inserting an edge loop or beveling an edge, and implement it. Your feature does not need to be one described in the lecture slides. If you are unsure how valuable your feature will be, you may email us with a description of what you want to implement.
Make sure your homework compiles, either on your own machine or in the Moore labs. We will deduct points from any homework that does not compile, and possibly give a 0 grade if the compile errors are numerous. After you have tested your program, zip the topmost folder of your project and submit the zip to the class web site.