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

OpenSubdiv.OPENSUBDIV_VERSION.Far.StencilReal

概述

OpenSubdiv.OPENSUBDIV_VERSION.Far.StencilReal 实现了用于计算远程顶点的可用于高效光栅化的精细级别的 stencil 模板。 其主要用于 FarPatchTables 中的纹理和着色器着色笔刷的使用,并可以用于 PatchTableFactory 创建时指定的不相交分区。

类型定义

IndexType

IndexType 是 stencil 模板中数组的索引类型。这可以是有符号或无符号整数类型。

WeightType

WeightType 是 stencil 模板中每个远程顶点权重的类型。这可以是 float 或 double 类型。

ValueType

ValueType 是 stencil 模板中远程顶点的类型。这可以是 float2、float3、float4、double2、double3 和 double4 类型。

StencilTable

StencilTable 包含一个指向远程顶点的指针数组以及一个权重数组。这两个数组必须被分类为 supported vertex types 和一个 label。

Public 成员

dstOffsetBuffer, dstIndexBuffer, dstWeightBuffer

这些成员变量是目标数据存储区的偏移量、索引和权重。它们可以是相同的长度,也可以是不同的长度。

SetSize

void SetSize(IndexType numStencils, IndexType numControlVertices, IndexType const * sizes);

设置 stencil 表的大小和形状。

numStencils 是 stencil 数组中的元素数。

numControlVertices 是一组控制顶点的数量。

sizes 是每个 stencil 的长度。

UpdateValues

void UpdateValues(ValueType const * values, IndexType const * indices);

更新 stencil 表中的源数据。

values 是用于确定 stencil 表的源数据的数组。

indices 是每个 stencil 索引值的序列。

UpdateWeights

void UpdateWeights(WeightType const * weights);

更新权重数组。

weights 是 stencil 表中权重的数组。

GetNumStencils

IndexType GetNumStencils() const;

返回 stencil 数组的大小。

GetSize

IndexType GetSize(IndexType indx) const;

返回指定 stencil 的大小。

GetIndex

IndexType const * GetIndex(IndexType stencilIndex) const;

返回指定 stencil 的索引。

GetWeight

WeightType const * GetWeight(IndexType stencilIndex) const;

返回指定 stencil 的权重。

例子

// 创建 stencil table
OpenSubdiv::Far::StencilTable stencil;
stencil.SetSize(numStencils, numControlVertices, &sizes[0]);

// 更新 stencil table 数据
stencil.UpdateValues(&values[0], &indices[0]);
stencil.UpdateWeights(&weights[0]);

// 获取 stencil table 数据
const OpenSubdiv::Far::IndexType stencilSize = stencil.GetSize(stencilIndex);
const OpenSubdiv::Far::IndexType * stencilIndices = stencil.GetIndex(stencilIndex);
const float * stencilWeights = stencil.GetWeight(stencilIndex);

异常

在使用 stencil 表时,可能会出现以下异常:

  • std::runtime_error:如果板之间相交,则会导致此异常。