Multi Resolution Mesh should be easy to implement in hardware.
To display a MRM mesh based on vertex collapsing, this is the method :
Each vertex have a sub-vertex index. Vertices are stored in an array and are sorted in weigh (importance) order, from the most important to the less. If you have 100 vertices in your mesh, and you want to display only 50 vertices, for each vertex pointed by a triangle corner you need to refine his index to have a vertex at a index lower or equal to 50. So you have to set up a small loop that is stopped when index <= 50.
With collapsing, some triangles become null (two or three indices should be equal after the indices refinement). To not fall in this error, you need only to sort triangles by vertex number threshold. So, as the number of vertex is lower, you have to simply stop the triangle display loop when the current triangle is null : if you setup a threshold for each triangle (an integer), you haven’t to test the validity of this, because you can compute the exact number of triangle that are valid for a specific number of vertices.
This algo permit the implementation of all simplification methods based on vertex collapsing, by providing a generic method to refine a mesh.
Actually, an MRM algo need at least to send 3 vertex indices to the graphic board. It’s a penalty in most case, and this bring bad result on very fast GPU. A such extension should be provided trough 1 integer for each vertex. When displaying a mesh in a displaylist or in a display element, you simply specify the number of triangle to display and the associated vertex maximum index.
In most case, MRM permit to multiply the complexity of scenes by 3 or 4, and is very efficient when you use instances.
What do you think of that ?
Gabriel RABHI / Z-OXYDE / France