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

OpenSubdiv.OPENSUBDIV_VERSION.Osd.Mesh

简介

OpenSubdiv是由皮克斯开发的一款Subdivision Surface的库。其中,Osd.Mesh是OpenSubdiv中的一个类,用于表示Subdivision Surface的Mesh。本文将介绍Osd.Mesh的详细信息。

类定义

Osd.Mesh类的定义如下:

class Mesh {
public:
    Mesh();
    ~Mesh();

    void SetKernel(KernelBundle const *kernel);
    void SetVertexBuffer(VertexBufferDescriptor const &vertexDesc, void *vertexData);

    void Refine();
    void Synchronize();

    Far::PatchTables const &GetPatchTables() const;
    Far::TopologyRefiner const &GetTopology() const;

    Vtr::internal::StackBuffer<char> *GetRefinementBuffer() { return _refinementBuffer; }

private:
    Far::TopologyRefiner _topology;                // 存储Subdivision Surface的拓扑信息
    Far::PatchTables _patchTables;                  // 存储Subdivision Surface的Patch信息
    Vtr::internal::StackBuffer<char> *_refinementBuffer;   // 存储Subdivision Surface的细分数据

    Far::StencilTable const *_vertexValenceStencilTable;    // 存储Subdivision Surface的顶点价值信息
    Far::StencilTable const *_varyingStencilTable;          // 存储Subdivision Surface的变化信息
    Far::StencilTable const *_vertexStencilTable;           // 存储Subdivision Surface的顶点信息
    Far::StencilTable const *_faceVaryingStencilTable;      // 存储Subdivision Surface的面变化信息
};

成员函数

Mesh()

构造函数,创建一个空的Mesh对象。

Mesh();

~Mesh()

析构函数,释放Mesh对象及其中的资源。

~Mesh();

SetKernel()

设置KernelBundle对象,用于确定细分Kernel。

void SetKernel(KernelBundle const *kernel);

参数:

  • kernel:KernelBundle对象指针

SetVertexBuffer()

设置Vertex Buffer的描述及数据。

void SetVertexBuffer(VertexBufferDescriptor const &vertexDesc, void *vertexData);

参数:

  • vertexDesc:VertexBufferDescriptor对象,描述Vertex Buffer的属性
  • vertexData:Vertex Buffer的数据

Refine()

进行Mesh的细分操作。

void Refine();

Synchronize()

同步Mesh对象的各个部分,确保Mesh中的数据都处在正确的状态。

void Synchronize();

GetPatchTables()

获取Mesh对象的PatchTables对象,存储了Subdivision Surface的Patch信息。

Far::PatchTables const &GetPatchTables() const;

返回值:

  • Far::PatchTables对象的引用,存储了Subdivision Surface的Patch信息

GetTopology()

获取Mesh对象的TopologyRefiner对象,存储了Subdivision Surface的拓扑信息。

Far::TopologyRefiner const &GetTopology() const;

返回值:

  • Far::TopologyRefiner对象的引用,存储了Subdivision Surface的拓扑信息

GetRefinementBuffer()

获取Mesh对象的Refinement Buffer对象,存储了Subdivision Surface的细分数据。

Vtr::internal::StackBuffer<char> *GetRefinementBuffer();

返回值:

  • Vtr::internal::StackBuffer<char>对象指针,存储了Subdivision Surface的细分数据

成员变量

_topology

存储Subdivision Surface的拓扑信息。

Far::TopologyRefiner _topology;

_refinementBuffer

存储Subdivision Surface的细分数据。

Vtr::internal::StackBuffer<char> *_refinementBuffer;

_patchTables

存储Subdivision Surface的Patch信息。

Far::PatchTables _patchTables;

_vertexValenceStencilTable

存储Subdivision Surface的顶点价值信息。

Far::StencilTable const *_vertexValenceStencilTable;

_varyingStencilTable

存储Subdivision Surface的变化信息。

Far::StencilTable const *_varyingStencilTable;

_vertexStencilTable

存储Subdivision Surface的顶点信息。

Far::StencilTable const *_vertexStencilTable;

_faceVaryingStencilTable

存储Subdivision Surface的面变化信息。

Far::StencilTable const *_faceVaryingStencilTable;

结语

本文介绍了OpenSubdiv中Osd.Mesh类的详细信息,包括类定义、成员函数、成员变量等。使用Osd.Mesh类可以方便地进行Subdivision Surface的Mesh细分,并获取细分后的Patch信息、拓扑信息等。