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.

1. Experiment with the GUI and the mesh
2. Perform simple data-structure operations.
3. Experiment with mesh subdivision

Instructions:

The assignment consists of two components: installation of Cartel and coding.

Installation:

• 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.