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

OpenSubdiv.OPENSUBDIV_VERSION.Far.PatchDescriptor

OpenSubdiv是一个开源的细分表面库,Far.PatchDescriptor是它的一个结构体。该结构体用于描述一个网格上的一组细分补丁。一个补丁是一个连接控制顶点的一组网格面集合,用于进行曲面细分。Far.PatchDescriptor具体描述了补丁的类型和拓扑结构。

结构体成员

Far.PatchDescriptor结构体有三个成员:

  • type:补丁类型,表示补丁上面的控制网格的类型,可能的取值为:
    • REGULAR:正则补丁类型。
    • BOUNDARY:边界补丁类型。
    • CORNER:角补丁类型。
    • GREGORY:Gregory补丁类型。
    • GREGORY_BOUNDARY:Gregory边界补丁类型。
  • pattern:补丁拓扑结构,它定义了补丁上面控制顶点的连接方式。可以使用以下的格式:
    • NONE:用于非B-Spline类型的补丁。
    • QUADS:用于四边形网格的B-Spline类型的补丁。
    • TRIANGLES:用于三角形网格的B-Spline类型的补丁。
    • REGULAR:用于更一般的B-Spline类型的补丁。
  • sharpness:补丁锐度,该值是一个浮点数,用于控制补丁处的细分。如果插值处的锐度接近无穷大,则补丁处将变得很尖锐。

使用示例

以下是一个使用Far.PatchDescriptor结构体的示例代码:

#include <OpenSubdiv/far/patchDescriptor.h>

// 创建一个正则补丁
OpenSubdiv::Far::PatchDescriptor desc(OpenSubdiv::Far::PatchDescriptor::REGULAR,
                                      OpenSubdiv::Far::PatchDescriptor::REGULAR);

// 设置补丁的锐度为1.5
desc.SetSharpness(1.5);

// 打印补丁结构
std::cout << "Type: " << desc.GetType() << "\n";
std::cout << "Pattern: " << desc.GetPattern() << "\n";
std::cout << "Sharpness: " << desc.GetSharpness() << "\n";

输出结果为:

Type: REGULAR
Pattern: REGULAR
Sharpness: 1.5

总结

Far.PatchDescriptor结构体是OpenSubdiv库中用于描述一个网格上的一组细分补丁的结构体。通过它的成员变量,我们可以描述一个补丁的类型、拓扑结构和锐度。该结构体在细分过程中起到了非常重要的作用。