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();
设置KernelBundle对象,用于确定细分Kernel。
void SetKernel(KernelBundle const *kernel);
参数:
kernel
:KernelBundle对象指针设置Vertex Buffer的描述及数据。
void SetVertexBuffer(VertexBufferDescriptor const &vertexDesc, void *vertexData);
参数:
vertexDesc
:VertexBufferDescriptor对象,描述Vertex Buffer的属性vertexData
:Vertex Buffer的数据进行Mesh的细分操作。
void Refine();
同步Mesh对象的各个部分,确保Mesh中的数据都处在正确的状态。
void Synchronize();
获取Mesh对象的PatchTables对象,存储了Subdivision Surface的Patch信息。
Far::PatchTables const &GetPatchTables() const;
返回值:
Far::PatchTables
对象的引用,存储了Subdivision Surface的Patch信息获取Mesh对象的TopologyRefiner对象,存储了Subdivision Surface的拓扑信息。
Far::TopologyRefiner const &GetTopology() const;
返回值:
Far::TopologyRefiner
对象的引用,存储了Subdivision Surface的拓扑信息获取Mesh对象的Refinement Buffer对象,存储了Subdivision Surface的细分数据。
Vtr::internal::StackBuffer<char> *GetRefinementBuffer();
返回值:
Vtr::internal::StackBuffer<char>
对象指针,存储了Subdivision Surface的细分数据存储Subdivision Surface的拓扑信息。
Far::TopologyRefiner _topology;
存储Subdivision Surface的细分数据。
Vtr::internal::StackBuffer<char> *_refinementBuffer;
存储Subdivision Surface的Patch信息。
Far::PatchTables _patchTables;
存储Subdivision Surface的顶点价值信息。
Far::StencilTable const *_vertexValenceStencilTable;
存储Subdivision Surface的变化信息。
Far::StencilTable const *_varyingStencilTable;
存储Subdivision Surface的顶点信息。
Far::StencilTable const *_vertexStencilTable;
存储Subdivision Surface的面变化信息。
Far::StencilTable const *_faceVaryingStencilTable;
本文介绍了OpenSubdiv中Osd.Mesh类的详细信息,包括类定义、成员函数、成员变量等。使用Osd.Mesh类可以方便地进行Subdivision Surface的Mesh细分,并获取细分后的Patch信息、拓扑信息等。