Sierpinski tetrahedron

While ago, I have a blog about a template error. I finally finished it today. I made a Sierpinski tetrahedron generator. http://en.wikipedia.org/wiki/Sierpinski_triangle
This time, I would like to learn OpenMesh (http://www.openmesh.org). I have my own mesh library, but usually I would like to solve a problem, so if there is a well developed open source library, I think it is better to switch to it. Figure 1 shows how to get consistent list of vertices by OpenMesh. Here, "consistent" means, I always would like to have the vertices indexed as in the Figure 1, up. For example, if O_1 and O_3 are exchanged, I have a problem to create a Sierpinski tetrahedron.

Figure 1: tetrahedron configuration

Figure2: creation rule 1
Figure 3: creation rule2

Actually, I don't know what is the best way to do that, I depends on the OpenMesh's face halfedge circulator. If anybody knows better way, please give me a comment. In my method, first I need to guarantee the input is a tetrahedron. This is done as following:

1. Pick one face, f0.

2. Get 1-ring neighbor faces of f0 by the face face circulator. Now    we have four faces (f0, f1, f2, f3). If we could not get four,    there is a boundary. But, a tetrahedron has no boundary, therefore    f0 is not a tetrahedron face.

3. For all {f0, f1, f2, f3}, get 1-ring neighbor faces and check    all are one of {f0, f1, f2, f3}. If we found an unknown face, this    is not a tetrahedron. Actually, f1, f2, f3 are obtained by f0's    face face circulator, therefore, we don't need to check the f0.

When we got a consistent vertex list, follow the Figure 2 and 3 rule to generate the Sierpinski tetrahedron. The OpenGL rendered result is shown in the following figures. This is nothing new and nothing complicated, but, I have not program anything related with a mesh, it was fun to do that.

No comments: