OpenSubdiv中的Far.PatchTable是一种表示细分曲面中所有小块的数据结构。它存储着块之间的拓扑关系和其他信息,以便更快地计算网格块之间的差异。
Far.PatchTable提供了两个构造函数:
PatchTable(int max_level)
:创建一个新的PatchTable对象,可容纳最大的子细分层数。该构造函数并不会分配内存,只是初始化了默认参数。在创建对象后,需要使用Resize()
方法为其分配足够的空间才能使用。PatchTable(PatchTable const & src)
:使用另一个PatchTable对象作为参数,创建一个完全相同的新对象。void Resize(int numPtexFaces, int numVertsInLastLevel)
该方法为PatchTable对象分配内存,为其中存储的块信息创建足够的空间。参数numPtexFaces
指定了PatchTable对象中的Ptex面数目,而numVertsInLastLevel
表示最高细分层级别的顶点数。调用该方法后,PatchTable对象将包含足够的空间以存储所有的块。
FarPatchTables::PatchArray const *GetPatchArray(int level) const
该方法返回一个指向层数为level
的PatchArray对象的指针。
int GetNumPatchesTotal() const
该方法返回PatchTable中的所有块数目。
int GetNumPtexFaces() const
该方法返回PatchTable对象中Ptex面的总数。
int GetNumControlVertices() const
该方法返回所有细分层的控制顶点数目之和。
OpenSubdiv.OPENSUBDIV_VERSION.Far.PatchTable是OpenSubdiv中的一个核心数据结构,用于存储细分曲面中所有小块的拓扑信息。通过该数据结构,可以更快地计算网格块之间的差异并生成细分曲面。