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.
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:
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.
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.
Comments