June 18th:: Exams tests for the Phd course are published

May 17th:: Payment by bank transfer and credit card is available

April 24th:: Programme is available

The courses presented at CGLibs make a PhD Course of University of Pisa.

The total length of all the lectures will amount to 20 hours.


The exam will consist of a project to be developed in c++ and the libraries VCGLib and Eigen. Each project may be done only by one or two students together. The application to be developed must be one of the following:

Choice 1: terrain reconstruction

Given a number of height samples on a rectangular bidimensional domain, the application must reconstruct a complete triangular mesh of the whole height field.
void reconstruct_terrain( int size_x, int size_y, std::vector < vcg::Point3f > samples, CMesh & result)
the bidimensional domain is from (0,0) to (size_x, size_y) ;
std::vector < vcg::Point3f> samples is a vector of known samples of the terrain, for example:

Where we assume the (X,Y) coordinates to be integer.

The result mesh will have (size_x+1) * (size_y+1) vertices and 2*size_x*size_y triangles.
The problem is to find the values for all the (x,y) that are not given as input.
For this the techniques ased on Radial Basis Function described in this paper must be used.
The resulting mesh must have a assigned a color per vertex that
indicates the distance between the vertex and the closest of the input samples

Choice 2: mesh intersection

Given two input meshes, the application will have to check for their intersection.
If there is intersection, a mesh composed by all the triangles of the two meshes that interset must be returned. If there is no intersection, then the minimal distance among the mesh must be returned.
vcg::Point3f intersection(CMesh & a, CMesh & b);

The return value is (0,0,0) if a and b intersect. If they do not, it is the vector obtained and the difference between the closes pair of points on the mesh.
Note: it is accepted that the closes points are approximated at the vertices.
Note 1: a spatial accelleration data structure must be used. Making n*m/2 tests (with n and m the number of triangles of a and b, respectively) is not acceptable

Choice 3: Harmonic field interpolation meshes.

A harmonic function defines a scalar- or vector-valued field, thus it is also called a harmonic field. Harmonic fields can be defined as solutions to Laplace's equation with certain boundary conditions. Over the discrete manifold surface of a mesh, harmonic fields can be computed by solving a linear system set up by a discrete Laplacian-Beltrami operator, incorporating boundary conditions imposed at a set of sites: Two possible tasks;
1) Implement plain harmonic interpolation
2) implement it in a dynamic setting

Choice 4: 3D Asset Import and Visualization on the Web.

There exists several ways to encode a 3D object or scene, including shape and appearance. Many file formats (OBJ, PLY, VRML, COLLADA, ...) exist, each with its own pros and cons.
implement an importer for the SpiderGL library for one of the following formats:


The importer should do its best at keeping all input information, while generating the most complete SpiderGL Model layered structure. To show the correctness and the capabilities of the importer, a simple web application that uses SpiderGL and imports and shows user-selected assets must be also provided. Note that this project must be done in JavaScript and HTML.

Delivery material:

- commented C++ code
- project files (QT .pro preferred)

The work must be submitted to the following email addresses:

No later than September 30th.