OpenSubdiv.OPENSUBDIV_VERSION.Bfr
OpenSubdiv.OPENSUBDIV_VERSION.Far
OpenSubdiv.OPENSUBDIV_VERSION.Osd
OpenSubdiv.OPENSUBDIV_VERSION.Sdc
OpenSubdiv.OPENSUBDIV_VERSION.Vtr

OpenSubdiv.OPENSUBDIV_VERSION.Far.PatchTable

OpenSubdiv中的Far.PatchTable是一种表示细分曲面中所有小块的数据结构。它存储着块之间的拓扑关系和其他信息,以便更快地计算网格块之间的差异。

构造函数

Far.PatchTable提供了两个构造函数:

  • PatchTable(int max_level):创建一个新的PatchTable对象,可容纳最大的子细分层数。该构造函数并不会分配内存,只是初始化了默认参数。在创建对象后,需要使用Resize()方法为其分配足够的空间才能使用。
  • PatchTable(PatchTable const & src):使用另一个PatchTable对象作为参数,创建一个完全相同的新对象。

方法

Resize

void Resize(int numPtexFaces, int numVertsInLastLevel)

该方法为PatchTable对象分配内存,为其中存储的块信息创建足够的空间。参数numPtexFaces指定了PatchTable对象中的Ptex面数目,而numVertsInLastLevel表示最高细分层级别的顶点数。调用该方法后,PatchTable对象将包含足够的空间以存储所有的块。

GetPatchArray

FarPatchTables::PatchArray const *GetPatchArray(int level) const

该方法返回一个指向层数为level的PatchArray对象的指针。

GetNumPatchesTotal

int GetNumPatchesTotal() const

该方法返回PatchTable中的所有块数目。

GetNumPtexFaces

int GetNumPtexFaces() const

该方法返回PatchTable对象中Ptex面的总数。

GetNumControlVertices

int GetNumControlVertices() const

该方法返回所有细分层的控制顶点数目之和。

结论

OpenSubdiv.OPENSUBDIV_VERSION.Far.PatchTable是OpenSubdiv中的一个核心数据结构,用于存储细分曲面中所有小块的拓扑信息。通过该数据结构,可以更快地计算网格块之间的差异并生成细分曲面。