OpenSubdiv.OPENSUBDIV_VERSION.Far.LimitStencilTableFactory
是OpenSubdiv库中的一个类,用于生成 OpenSubdiv.OPENSUBDIV_VERSION.Far.LimitStencilTable
的对象实例。
该类的主要功能是生成 OpenSubdiv.OPENSUBDIV_VERSION.Far.LimitStencilTable
的对象实例,用于描述网格表面上每个顶点最大可扩展深度的限制情况。
该类的主要接口如下:
template <class T, class U>
class LimitStencilTableFactory {
public:
static LimitStencilTable<U> *Create(FarMesh<U> const *mesh,
int numTables = 1,
Options const *options = NULL);
};
其中,T
表示顶点的数据类型,U
表示图元(如边或面)的数据类型。
该函数用于创建一个 OpenSubdiv.OPENSUBDIV_VERSION.Far.LimitStencilTable
的对象实例,并返回指向该实例的指针。
参数:
mesh
:指向 OpenSubdiv.OPENSUBDIV_VERSION.FarMesh
的对象实例的指针,用于描述原始网格的拓扑、几何信息。numTables
:表示需要生成的限制表数量,默认值为1。options
:表示选项的配置,用于控制限制表生成的方式和质量。以下示例演示了如何使用 OpenSubdiv.OPENSUBDIV_VERSION.Far.LimitStencilTableFactory
。
#include <opensubdiv/far/topologyDescriptor.h>
#include <opensubdiv/far/topologyRefiner.h>
#include <opensubdiv/far/stencilTable.h>
#include <opensubdiv/far/limitStencilTable.h>
#include <opensubdiv/far/limitStencilTableFactory.h>
using namespace OpenSubdiv;
// 定义顶点数据类型
struct Vertex {
// 顶点坐标
float pos[3];
};
// 定义面数据类型
struct Face {
// 面顶点索引
int idx[4];
};
int main() {
int numVertices = 8;
int numFaces = 6;
// 定义拓扑描述符
FarTopologyDescriptor desc;
desc.numVertices = numVertices;
desc.numFaces = numFaces;
desc.numVertsPerFace = 4;
// 定义拓扑网格
FarTopologyRefiner *refiner = FarTopologyRefinerFactory<Vertex, Face>::Create(desc, NULL);
// 创建几何数据(略)
// 生成限制表
FarLimitStencilTable *limitStencilTable = LimitStencilTableFactory<Vertex, Face>::Create(refiner->GetFarMesh());
// 使用限制表(略)
return 0;
}
Create
函数之前,需先创建拓扑网格及其几何数据。