OpenSubdiv是一个高性能、可扩展、开源的细分曲面库,它包含一系列用于细分曲面的算法以及相应的数据结构。
OpenSubdiv的Sdc(Subdivision Control)模块是用来管理和操作细分曲面控制数据的核心模块之一,SchemeTypeTraits是Sdc模块中的一个关键类,它用于定义Sdc模块中的不同细分算法的特性。
Sdc.SchemeTypeTraits是一个模板类,用于定义Sdc模块中的不同细分算法的特性,包括细分算法的名称、是否支持边界细分、是否支持非自交细分等等。
Sdc.SchemeTypeTraits的定义如下:
template <unsigned int _N>
struct SchemeTypeTraits
{
static const int MAX_WEIGHTS_PER_VERTEX = _N;
static const char* getName();
static bool supportsTopologyTags();
static bool supportsNonmanifoldTopology();
static bool supportsSmoothCorner();
static bool supportsGregory();
static bool isLoopScheme();
static bool isCatmarkScheme();
static bool isBilinearScheme();
static bool isLinearScheme();
static bool isNonLinearScheme();
static bool isNonCatmarkScheme();
};
其中,_N表示顶点上最大的边界权重,MAX_WEIGHTS_PER_VERTEX表示最大的边界权重。
其他函数的功能如下:
Sdc.SchemeTypeTraits定义了一些用于描述不同细分算法特性的函数,在Sdc模块的其他类中使用这些函数可以根据算法类型不同来实现相应的不同操作。