VCG lib提供了很多对mesh进行编码的方式,最常见的就是由一个顶点(vertices )集合和一个三角形(triangles )集合构成,(即三角形构成三角形网格,四面体构成四面体网格)。如下面这行代码就是VCG中定义mesh类型的一个例子:
class MyMesh : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace>, std::vector<MyEdge> > {};
其中vcg::tri::TriMesh是三角形网格的基本类型,结合如下模板参数进行具体定义:
- 包含顶点的容器,通常是一个std::vector,用我们自定义的顶点类型来确定vector中的元素类型。
- 可随机访问的包含面(face)的容器,同样地我们需要用自定义的面类型来确定该容器的元素类型。
也就是说,定义一个网格类型的时候,我们只需要继承vcg::tri::TriMesh,并提供包含编码网格元素的容器即可。在下面这个例子中,我们仍然使用元素类型为MyEdge(顾名思义,就是我们自定义的边的类型)的vector来表示边的集合。注意,VCG中并没有预先定义一个顺序来传递顶点,面,边容器参数,也就是说我们上面这样写只是惯例而已,也可以不按照这个顺序来传递参数。
#include <vector>
#include <vcg/complex/complex.h>
class MyVertex; class MyEdge; class MyFace;
struct MyUsedTypes : public vcg::UsedTypes<vcg::Use<MyVertex> ::AsVertexType,
vcg::Use<MyEdge> ::AsEdgeType,
vcg::Use<MyFace> ::AsFaceType>{};
class MyVertex : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coo