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