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

OpenSubdiv.OPENSUBDIV_VERSION.Osd.CudaPatchTable

简介

OpenSubdiv是一个用于高性能、可扩展三角网格细分的库。它支持各种平台和渲染器,并在Pixar动画工作室中使用,能够在大规模场景下高效完成细分操作。其中,Osd.CudaPatchTable是OpenSubdiv的CUDA版本中的数据结构,用于存储三角形网格细分时的细分信息。

类型定义

struct CudaPatchTable {
    ...
};

成员变量

  • int numPatchArrays

    存储当前CUDA Patch Table包含的子数组的数量(也就是Patch Array的数目)。

  • int numPatches

    存储当前CUDA Patch Table包含的所有块的数量(也就是Patch的数目)。

  • int patchIndexOffset

    存储Patch Index序列的起始偏移量(也就是要细分的网格的细分等级低于当前Patch Table的最大细分层数)。

  • int patchIndexLength

    存储Patch Index序列的长度(也就是包含在当前Patch Table中的所有Patch Index的数量)。

  • int patchArrayOffset

    存储Patch Array序列的起始偏移量(也就是Patch Array集合中的第一个Patch Array在Patch Array序列中的偏移量)。

  • int patchArrayLengths[4]

    存储每个Patch Array的长度。由于每个Patch Array的长度不同,当前数据结构使用数组来存储每个Patch Array的长度。

  • int patchArrayStrides[4]

    存储每个Patch Array之间的跨度(也就是Patch Array集合中相邻两个Patch Array的地址之间的间隔)。

  • int patchArrayIndicesLength

    存储Patch Array索引序列的长度(也就是包含在当前Patch Table中的所有Patch Array Index的数量)。

构造函数

CudaPatchTable(int numPatches,
               const int* patchArrayLengths,
               const int* patchArrayIndices,
               int patchIndexBase);

参数说明

  • int numPatches

    存储Patch Table包含的所有块的数量。

  • const int* patchArrayLengths

    存储每个Patch Array的长度的数组。

  • const int* patchArrayIndices

    存储Patch Array的Index列表的数组。

  • int patchIndexBase

    存储当前Patch Table包含的Patch Index序列的起始偏移量。

总结

在OpenSubdiv中,Osd.CudaPatchTable是一个存储三角形网格细分时的细分信息的数据结构。它包含了该数据结构的基本成员变量和构造函数,具有较高的可扩展性和灵活性。通过对这一数据结构的深入理解,我们可以更好地利用OpenSubdiv实现三角形网格的高效细分。