Assignment #1:
Subdivision
Submission date: Friday, Sep 30 2016, 23:59
Objective:
Learn to use a real-life medium size programming environment & data structure for meshes.
Tasks:
- Experiment with the GUI and the mesh
- Perform simple data-structure operations.
- Experiment with mesh subdivision
Instructions:
The assignment consists of two components: installation of Cartel and coding.
Installation:
- Download and unpack Cartel sources from (here).
- To compile the package under Windows you will need Visual Studio 2012 or later.
All dependencies are included in the file provided and are
already linked in the project, so no work should be required on your
part.
- For other building options (e.g. Linux/MacOS, other compilers) the following dependencies should be downloaded and installed, check the Makefile for more details:
Reading the documentation on the Cartel Website is
highly recommended to get a handle on the code structure. Your
algorithms will be coded as functions directly into the EditMesh class,
and called via key bindings in the ControlState class.
Coding:
- You should implement a subdivision scheme for closed meshes as a new function in Cartel or a mesh library of your choice.
- The scheme options are Loop, butterfly or Sqrt(3). The last one is the most tricky - good for those who want a challenge :). You SHOULD NOT re-implement a scheme already provided by the library you use.
-
E.g. if you use Meshlab, Sqrt(3) is your only option. You can play
with weights and other parameters to experiment with different results.
- The Loop and butterfly formulas are found here. The Sqrt(3) algorithm is explained in details in the following paper,
Your function should take only necessary input
parameters, and perform one iteration of the algorithm on the loaded
mesh. The algorithm should work correctly if run multiple times.
BONUS: You can get extra marks for implementing any of the following options
(bonus at the discretion of the marker). For the description of each option, please refer to online
literature on subdivision.
-
Implement a subdivision scheme that performs correctly on meshes with
boundaries.
- Implement vertex projection to the limit surface.
- Implement normal computation using the limit surface
Inputs:
A small set of inputs to debug your algorithm can be found
here. It contains coarse meshes with and without boundary. More meshes can be downloaded from, e.g.
aim@shape repository.
Please note that the provided Cartel software only included functionality to load OBJ files at the moment, so
meshes in any other format will require conversion.
Submission:
Send an email to Giorgio (gorig@cs.ubc.ca)
with the subject "[CPSC 524] Assign1" containing a zip file with your source code, do not include any binaries.
All emails should be received by Friday, 9/30/2016, at 23:59.
All assignments will be marked in person, using a schedule which will be published on Piazza. Please make
sure to register for a marking spot. Please do not touch your code between submission deadline and marking session.
Late assignments policy:You have 3 grace days total for all of your assignments, you can use them whenever you want during the course.
This assignment is 15% of your final grade.
Good luck!