Description
1 – Objective The topic of this project polyhedral mesh manipulation. For this project you will implement methods of creating and modifying polyhedral surfaces. For object creation, you will read a mesh description from a file. Your program should be able to display flat or smooth shaded meshes, with either white or random colors. Most importantly, your program will calculate the triangulated dual of the current object. All of the mesh objects that you create and modify will be made of only triangles. A large portion of your grade on this project will be the dual operator, so make sure you get to this! 2 – Deadline This project should be submitted on T-Square by 11:55PM on Thursday December 7, 2017. 3 – Process 3.1 Download the base source Download and unzip the folder with the base code for this project on T-Square.
3.2 Polyhedral File Format The file format we will use for this project is a simple text format for meshes. The file format is basically an indexed face set. The first two lines specify the number of vertices and faces of the model, respectively. Then all of the vertex (x,y,z) values are listed, one per line. This is followed by the list of faces, one face per line. The first number that describes a face is simply the number of sides of that face, and for this project, that number will always be 3. Following this, indices into the vertex list are given. The vertices are indexed starting from the value zero. You can open these files in any text editor.
3.3 Project description Your finished program will be able to read a mesh from a file and display that mesh. More importantly, with a keystroke your program will triangulated dual of the mesh, replacing the old mesh in memory. Your program should also allow toggling between flat shading (per-polygon normals) and smooth shading (per-vertex normals). Your program should obey the following keystroke commands:
1-5: Read in a mesh file (tetrahedron, octahedron, icosahedron, star, torus). d: Run the dual operation on the current mesh (you should be able to dual more than once). n: Toggle between per-face and per-vertex normals. r: Assign a random color to each face of the mesh. (Set the colors once – don’t make flickering colors!) w: Change the colors of the mesh faces to white. space: Toggle automatic rotation on and off.
CS3451 Fall 2017 Project 5: Mesh Processing 2 / 5
3.4 Suggested Approach
First, modify the skeleton code to read in the .ply file format into your own polyhedral model data structure. Next, modify the “draw” routine to draw the current polyhedral mesh. You should then write the code needed to calculate surface normals at the vertices of a model. Modify the drawing routine so that it can toggle between perface and per-vertex normals. Finally, write a routine that takes a given model and creates the triangulated dual of it.
Calculating the triangulated dual of a give mesh is the most challenging aspect of this project. It also counts for a significant part of your grade on this project. There are several stages to creating the dual. First, you will want to calculate the centroid of each triangle. These triangle centroids will become some of the vertices in the new dual mesh. Usually, you would then travel around a given vertex of the original mesh, connecting together these triangle centroids into a dual face. Unfortunately this would sometimes create faces with more than three edges, and we want to restrict this project to only triangles. To avoid this, you should triangulate a given dual face by calculating a new vertex that is the average of the triangle centroids. Then create the collection of new triangles that, taken together, form the dual face. Once you have created a new triangulated dual face for each vertex of the original mesh, you will have completed the triangulated dual mesh. See the octahedron and its triangulated dual in the images below to see how each original vertex is turned into a square, and how each square is in fact made of four triangles (shown by the random colors). In summary, the dual mesh is created by iterating over each vertex of the original mesh. The process of each iteration can be shown in the following 4 steps.
CS3451 Fall 2017 Project 5: Mesh Processing 3 / 5
Note that you should be able to create the triangulated dual of a model more than once. Each time you calculate the dual, this will result in a mesh that has more triangles than the previous one.
We strongly recommend using the “corners” representation to store and manipulate your polygonal meshes. Note that all of the meshes for this project contain only triangles, so the corners representation is appropriate. Keep in mind that you will need mesh adjacency information to create a dual mesh and also to calculate per-vertex normals.
Sample Results (Compare your results to those which are given. Duals are shown with 1st and 2nd keypress and with random colored faces for each shape) Flat Shaded Smooth Shaded Dual (1 Iteration) Dual (2 Iterations)
CS3451 Fall 2017 Project 5: Mesh Processing 4 / 5
3.5 Authorship Rules The code that you turn in entirely your own. You are allowed to talk to other members of the class and to the Professor and the TA about general implementation of the assignment. It is also fine to seek the help of others for general Processing/Java programming questions. You may not, however, use code or pseudocode that anyone other than yourself has written. Code (including pseudocode) that is explicitly not allowed includes code taken from the Web including the processing website, from books, from previous assignments or from any source other than yourself. The only exception to this is that you can make use of the example code for this assignment. You should not show your code or pseudocode to other students. Feel free to seek the help of the Professor and the TA’s for suggestions about debugging your code.
CS3451 Fall 2017 Project 5: Mesh Processing 5 / 5
3.6 Submission In order to run the source code, it must be in a folder named after the main file. When submitting any assignment, leave it in this folder, compress it using zip and submit via T-square