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

OpenSubdiv.OPENSUBDIV_VERSION.Osd.TbbEvaluator

OpenSubdiv是一个高性能、面向细节的Subdivision表面细化库,可以用于各种图形应用程序。其中,Osd.TbbEvaluator是OpenSubdiv库中的一个TBB线程池表面求值器,用于在多线程环境下对曲面进行求值。

概述

Osd.TbbEvaluator实现了Subdivision表面细化算法,可以将初始曲面细化为更精细的曲面。该求值器支持Bezier、BSpline和Catmull-Clark曲线类型,可以自定义曲线的边界条件和细化规则。同时,Osd.TbbEvaluator利用了TBB线程池技术,可以在多核CPU上高效地进行曲面求值,并且可以根据硬件资源和曲面特性自动调整线程池大小和分配策略。

接口

Osd.TbbEvaluator提供了以下公共接口:

构造函数

Osd::TbbEvaluator::TbbEvaluator(const Far::PatchTable* patchTable,
                                const Far::LimitStencilTable* limitTable,
                                const Far::PatchParamTable* patchParamTable,
                                int numThreads=0,
                                bool doQuad=false);

该构造函数用于创建一个TBB线程池表面求值器。其中,参数patchTable、limitTable和patchParamTable是Subdivision库中的数据结构,用于存储曲面的拓扑结构、控制点、限制点和曲面类型等信息。numThreads参数用于指定线程池的大小,如果为0则使用硬件线程数。doQuad参数表示是否对四边形曲面进行细化。

求值函数

void Osd::TbbEvaluator::EvalStencils(Far::PatchTable const & patchTable,
                                     Far::StencilTable const & vertexStencils,
                                     float const * vertexValues,
                                     int numValues,
                                     int const * vertexIndices,
                                     float * results,
                                     int numResults,
                                     int start=0, int end=-1) const;

该函数用于对曲面进行求值。参数patchTable、vertexStencils、vertexValues和vertexIndices是Subdivision库中的数据结构,用于描述曲面的细分信息和控制点信息。numValues参数表示细分后的顶点数量,results数组用于存储求值后的顶点位置和法线等信息,numResults参数表示result数组的大小。start和end参数用于指定要求值的顶点范围,如果end为-1则代表到最后一个顶点。

用法示例

以下示例展示了如何使用Osd.TbbEvaluator对曲面进行求值。

#include <osd/tbbEvaluator.h>

Osd::TbbEvaluator evaluator(patchTable, limitTable, paramTable);

// 求值所有顶点
evaluator.EvalStencils(patchTable, vertexStencils, vertexValues,
                       numVertices, vertexIndices,
                       results, numResults);

// 求值部分顶点
evaluator.EvalStencils(patchTable, vertexStencils, vertexValues,
                       numVertices, vertexIndices,
                       results, numResults, start, end);

结论

Osd.TbbEvaluator是OpenSubdiv库中的一个TBB线程池表面求值器,可以在多线程环境下高效地对曲面进行求值。该求值器支持Bezier、BSpline和Catmull-Clark曲线类型,可以自定义曲线的边界条件和细化规则,并且可以根据硬件资源和曲面特性自动调整线程池大小和分配策略。