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

OpenSubdiv.OPENSUBDIV_VERSION.Osd.D3D11LegacyGregoryPatchTable

OpenSubdiv是一个高性能、通用和可扩展的细分曲面库,它提供了多种细分方法,支持几乎所有的三维软件。

本文档介绍了OpenSubdiv的Osd.D3D11LegacyGregoryPatchTable,它是OpenSubdiv的一个D3D11实现版本,用于Gregory曲面的细分。

定义

class OsdD3D11LegacyGregoryPatchTable : OsdD3D11PatchTable {

public:
    // 构造函数
    OsdD3D11LegacyGregoryPatchTable();

    // 分配表格内存
    bool allocate(int numVertices, int numPtexFaces);

    // 获取Gergory曲面的控制点信息
    const float* GetGregoryControlVertex(int patchIndex, int rotation);

    // 获取Gregory曲面patch的数量
    int GetNumGregoryPatches() const;

    // 获取一组控制点的数量
    int GetNumControlVertices() const;

};

成员变量

struct Vertex {
    short boundary[4];
    short edge[4][2][2];
    unsigned char vertex[20];
};

成员函数

OsdD3D11LegacyGregoryPatchTable()

构造函数

bool allocate(int numVertices, int numPtexFaces)

分配表格内存

  • numVertices: 所有顶点数量
  • numPtexFaces: ptex面片数量

返回值:bool类型,表示是否分配成功

const float* GetGregoryControlVertex(int patchIndex, int rotation)

获取Gergory曲面的控制点信息

  • patchIndex: patch索引
  • rotation: 索引旋转的次数

返回值:float类型,表示Gergory曲面的控制点信息

int GetNumGregoryPatches() const

获取Gregory曲面patch的数量

返回值:int类型,表示Gregory曲面patch的数量

int GetNumControlVertices() const

获取一组控制点的数量

返回值:int类型,表示一组控制点的数量

备注

OpenSubdiv的Osd.D3D11LegacyGregoryPatchTable用于实现Gregory曲面的细分,提供了一系列操作函数来方便使用。需要注意的是,该类需要D3D11的支持。