Open mesh/Boundary, linux port, loop subdiv

I failed to update the blog but here s what I have been looking into:

First, open meshes, I have implemented them, some results at the end of this post (Cube without bottom face, square, torus without bottom face). To do so, I had to refactor my library for clarity, some smart design ideas come from CGAL, that explains how the masks should be separated from the subdivision “style” -> a quad face split into 4 quads by the edges is a subdivision style, the weights we use to compute the new vertices is the mask.

From there it was fairly easy to implement the boundaries, finding the right coefficients was the most difficult part.

Boundary edge: average of each ends of the edge

Original boundary vertex:sum of each ends of the boundary, (weight 2 together), with original position (weight 6).

I also had to convert the solution to a nice qt application for linux (I was using my old directX framework, but our labs are on linux, so quite a bit of work on that side). So I used that time to make a nice framework to see the subdivision process more easily. More screenshots soon (when I m back in the labs).

Finally I looked into doing loop subdivision in a geometry shader but it doesn’t sound possible. However, I think it wouldn’t take long to implement loop as well… in fact, once that half edge data structure is there, and flexible enough to support different types of meshes (indexing…) it s very easy to do more.

My plans now are: get tangents and limit surface, and have a sort of presentation draft to show to my tutor for wednesday.

Torus

I added a torus and cleaned the code a bit:

Next steps are: Get the limit surface with a few points, get the tangents right (for accurate normals)

CatmullClark subdivision surfaces

Got them working. Atm it only work with closed meshes because of the half mesh restrictions (actually, all the features are ready for open meshes BUT the neighbor query which is a bit doggy)

Here are the lovely screenshots (directX doesnt support quads on PC, so it s broken down in triangle AFTER subdivision):

We can see the extraordinary vertices where the corners were: The corners of the cube have a valence of 3, and the algorithm carries them along. It is not much of a problem for catmull clark, the only real problem will(would) be the open meshes.