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

OpenSubdiv.OPENSUBDIV_VERSION.Sdc.Options

简介

OpenSubdiv.OPENSUBDIV_VERSION.Sdc.Options是OpenSubdiv的一个模块,用于指定Subdivision Scheme(亚细分方案)的选项和参数。

使用

要使用OpenSubdiv.OPENSUBDIV_VERSION.Sdc.Options,需要先包含相应的头文件:

#include <opensubdiv/sdc/options.h>

然后就可以创建一个Sdc::Options对象,并指定相应的选项和参数:

Sdc::Options options;
options.SetVtxBoundaryInterpolation(Sdc::Options::VTX_BOUNDARY_EDGE_ONLY);
options.SetCreaseMethod(Sdc::Options::CREASE_UNIFORM);

API

Sdc::Options类包含以下成员函数用于设置Subdivision Scheme选项和参数:

SetVtxBoundaryInterpolation()

设置Vertex Boundary Interpolation方法(用于处理Mesh表面上的Boundary)。

函数原型:

void SetVtxBoundaryInterpolation(VtxBoundaryInterpolation value);

其中,参数VtxBoundaryInterpolation是一个枚举类型,包含以下值:

enum VtxBoundaryInterpolation {
    VTX_BOUNDARY_NONE,          // No special treatment for boundaries (default)
    VTX_BOUNDARY_EQUAL,         // Interpolate using equal weight only
    VTX_BOUNDARY_EDGE_ONLY,     // Interpolate only along edges
    VTX_BOUNDARY_EDGE_AND_CORNER // Interpolate along edges and corners
};

GetVtxBoundaryInterpolation()

获取当前设置的Vertex Boundary Interpolation方法。

函数原型:

VtxBoundaryInterpolation GetVtxBoundaryInterpolation() const;

返回值为当前设置的VtxBoundaryInterpolation枚举值。

SetCreaseMethod()

设置Crease Method(用于处理Crease Edge)。

函数原型:

void SetCreaseMethod(CreaseMethod value);

其中,参数CreaseMethod是一个枚举类型,包含以下值:

enum CreaseMethod {
    CREASE_UNIFORM,    // Uniform creases (default)
    CREASE_CHAIKIN,    // Chaikin-style creases
    CREASE_SWARZTRAUB     // Swarztraub-style creases
};

GetCreaseMethod()

获取当前设置的Crease Method。

函数原型:

CreaseMethod GetCreaseMethod() const;

返回值为当前设置的CreaseMethod枚举值。

SetTriangleSubdivision()

设置Triangle Subdivision方法。

函数原型:

void SetTriangleSubdivision(TriangleSubdivision value);

其中,参数TriangleSubdivision是一个枚举类型,包含以下值:

enum TriangleSubdivision {
    TRI_SUB_UNIFORM,     // Uniform triangle subdivision (default)
    TRI_SUB_ADAPTIVE     // Adaptive triangle subdivision
};

GetTriangleSubdivision()

获取当前设置的Triangle Subdivision方法。

函数原型:

TriangleSubdivision GetTriangleSubdivision() const;

返回值为当前设置的TriangleSubdivision枚举值。

SetFaceVaryingLinearInterpolation()

设置Face-Varying Linear Interpolation方法。

函数原型:

void SetFaceVaryingLinearInterpolation(FVarLinearInterpolation value);

其中,参数FVarLinearInterpolation是一个枚举类型,包含以下值:

enum FVarLinearInterpolation {
    FVAR_LINEAR_NONE,           // No face-varying linear interpoaltion (default)
    FVAR_LINEAR_CORNERS_ONLY,   // Linear interpolation only at corners
    FVAR_LINEAR_CORNERS_PLUS1,  // Linear interpolation and subdivision at corners plus 1 ring
    FVAR_LINEAR_ALL             // Linear interpolation everywhere
};

GetFaceVaryingLinearInterpolation()

获取当前设置的Face-Varying Linear Interpolation方法。

函数原型:

FVarLinearInterpolation GetFaceVaryingLinearInterpolation() const;

返回值为当前设置的FVarLinearInterpolation枚举值。

结论

在使用Subdivision Scheme时,开发者可以使用OpenSubdiv.OPENSUBDIV_VERSION.Sdc.Options来指定选项和参数以达到更好的Subdivision结果。在实际使用时,需要注意不同选项和参数的影响。