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

OpenSubdiv.OPENSUBDIV_VERSION.Osd.EvaluatorCacheT

EvaluatorCacheT是OpenSubdiv的一个模板类,用于保存和管理求值器对象。它是OpenSubdiv分级细分技术的一部分,用于对控制网格进行分级,以便根据需要生成更高分辨率的网格。

构造函数

EvaluatorCacheT的构造函数如下:

EvaluatorCacheT(int numElements, int numVertexElements, int numVaryingElements)

其中,numElements是要求值的元素数量,numVertexElements是每个顶点存储的元素数量,numVaryingElements是每个parameterization点存储的元素数量。

成员函数

EvaluatorCacheT有以下公有成员函数:

int GetNumElements() const

获取要求值的元素数量。

int GetNumVertexElements() const

获取每个顶点存储的元素数量。

int GetNumVaryingElements() const

获取每个parameterization点存储的元素数量。

void Resize(int numElements, int numVertexElements, int numVaryingElements)

重新设置要求值的元素数量和每个顶点、parameterization点存储的元素数量。

Evaluator* GetEvaluator(int index)

获取特定位置的求值器。

Evaluator* GetVertexEvaluator(int vertex)

获取与特定顶点相关的求值器。

Evaluator* GetVaryingEvaluator(int varying)

获取与特定parameterization点相关的求值器。

void Clear()

清空缓存并删除所有求值器。

void UpdateValues(Context* context, int frame)

更新所有求值器的值。

void UpdateValuesForVertex(Context* context, int vertex, int frame)

更新与特定顶点相关的求值器的值。

void UpdateValuesForVarying(Context* context, int varying, int frame)

更新与特定parameterization点相关的求值器的值。

使用示例

以下例子演示了如何使用EvaluatorCacheT

// 构造EvaluatorCacheT
Osd::EvaluatorCacheT<MyEvaluator> evaluatorCache(numElements, numVertexElements, numVaryingElements);

// 获取求值器并设置值
for (int i = 0; i < evaluatorCache.GetNumElements(); ++i) {
    MyEvaluator* evaluator = static_cast<MyEvaluator*>(evaluatorCache.GetEvaluator(i));
    evaluator->SetValue(value);
}

// 更新求值器的值
evaluatorCache.UpdateValues(context, frame);

参考资料

  • OpenSubdiv官方文档 : https://graphics.pixar.com/opensubdiv/docs/