标签:图片 normal 没有 纹理 纹理贴图 smo 去除 例子 ORC
网格的数据结构其实就是一个图结构:点,边,面。可以是有向图,比如半边结构,也可以是无向图。在不同的软件或者开发包里,网格数据结构的实现都是有差异的。这种差异主要体现在网格连接关系的记录结构上,比如顶点是否记录邻域点,边,面信息,边是否记录邻域面信息等。记录的信息越多,查询的时候越方便,但是冗余的信息也越多,如果网格连接关系有变动,维护的信息也越多。另外,这些关系的建立也是需要开销的。所以,没有最好的数据结构,只有最适合当前算法的数据结构。
下面是一个例子:ITriMesh用于表达网格数据结构。网格算法都是基于ITriMesh接口来调用的,具体如下:
class ITriMesh
{
public:
ITriMesh(){}
virtual Int GetVertexCount(void) const = 0;
virtual Int GetTriangleCount(void) const = 0;
virtual Vector3 GetVertexCoord(Int vid) const = 0;
virtual void SetVertexCoord(Int vid, const Vector3& coord) = 0;
virtual Vector3 GetVertexNormal(Int vid) const = 0;
virtual void SetVertexNormal(Int vid, const Vector3& normal) = 0;
virtual void GetTriangleVertexIds(Int fid, Int vertexIds[3]) const = 0;
virtual void SetTriangleVertexIds(Int fid, Int vertexId0, Int vertexId1, Int vertexId2) = 0;
virtual Vector3 GetTriangleNormal(Int fid) const = 0;
virtual void SetTriangleNormal(Int fid, const Vector3& normal) = 0;
virtual Int InsertTriangle(Int vertexId0, Int vertexId1, Int vertexId2) = 0;
virtual Int InsertVertex(const Vector3& coord) =