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

OpenSubdiv.OPENSUBDIV_VERSION.Far.AdaptiveOptions

OpenSubdiv.OPENSUBDIV_VERSION.Far.AdaptiveOptions 是 OpenSubdiv 库中的一个类,用于表示自适应细分过程中的选项。该类提供了一些参数,用于控制自适应细分的细节,从而影响最终的细分结果。

成员变量

OpenSubdiv.OPENSUBDIV_VERSION.Far.AdaptiveOptions 类具有以下成员变量:

  • refineLevel: 表示最终细分级别的参考值。
  • maxLevel: 表示细分过程的最大级别。
  • adaptive: 一个布尔值,表示是否执行自适应细分。当该参数为 false 时,将使用传统细分算法进行细分。
  • useSingleCreasePatch: 一个布尔值,表示是否使用单独的缝合控制点来处理硬边和硬角的情况。
  • forceBoundary: 一个布尔值,当使用自适应细分时,表示是否在网格边界上强制执行细分。
  • nonManifold: 一个布尔值,表示是否处理非流形网格的情况。
  • patchType: 一个枚举类型,表示所需的输出路径类型。

使用方法

您可以使用 OpenSubdiv.OPENSUBDIV_VERSION.Far.AdaptiveOptions 类的对象来构建自适应细分的管线。例如,以下代码片段演示了如何使用 AdaptiveOptions 对象来构建一个自适应细分的管线:

#include <opensubdiv/far/topologyRefiner.h>
#include <opensubdiv/far/stencilTable.h>
#include <opensubdiv/far/patchTable.h>
#include <opensubdiv/far/adaptiveOptions.h>

using namespace OpenSubdiv;

int main()
{
    // 创建 Refiner 对象
    Far::TopologyRefiner topologyRefiner(/* 细分拓扑描述 */);

    // 创建 StencilTable 对象
    Far::StencilTable stencilTable(/* 细分算法描述 */);

    // 创建 PatchTable 对象
    Far::PatchTable patchTable(/* 接口特定数据 */);

    // 创建 AdaptiveOptions 对象
    Far::AdaptiveOptions adaptiveOptions;
    adaptiveOptions.refineLevel = 3;
    adaptiveOptions.maxLevel = 5;
    adaptiveOptions.adaptive = true;
    adaptiveOptions.useSingleCreasePatch = true;
    adaptiveOptions.forceBoundary = true;
    adaptiveOptions.nonManifold = true;
    adaptiveOptions.patchType = Far::QUADS;

    // 构建细分管线
    Far::PatchTable * result = patchTable.AdaptiveEdit(stencilTable, adaptiveOptions, &topologyRefiner);

    // ...
}

在上述示例中,我们创建了一个 AdaptiveOptions 对象,并设置了其成员变量。然后,我们将 AdaptiveOptions 对象作为参数,在 patchTable 对象上调用 AdaptiveEdit() 函数,从而构建了一个自适应细分的管线。

注意事项

在使用 OpenSubdiv.OPENSUBDIV_VERSION.Far.AdaptiveOptions 类时,请注意以下事项:

  • 您应该使用与当前版本的 OpenSubdiv 库兼容的 API 版本号替换 OPENSUBDIV_VERSION
  • 在使用 AdaptiveOptions 对象时,您应该根据需要设置 refineLevelmaxLevel 成员变量。不良的设置可能会导致非常慢或不稳定的细分过程。
  • 如果您需要使用硬边或硬角来控制网格的细分行为,则应将 useSingleCreasePatch 成员变量设置为 true
  • 如果您的网格具有非流形拓扑,则应将 nonManifold 成员变量设置为 true
  • 在使用 AdaptiveOptions 对象时,请务必仔细检查所有成员变量的设置,以确保细分算法的正确执行。不良的设置可能会导致无法预测的行为。