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);