OpenSubdiv.OPENSUBDIV_VERSION.Osd.D3D11ComputeEvaluator是用于Direct3D11中计算OpenSubdiv曲面细分的评估器。
OsdD3D11ComputeEvaluator(ID3D11DeviceContext1 *deviceContext1,
ID3D11Buffer *vertexBuffer,
ID3D11Buffer *varyingBuffer,
ID3D11Buffer *vertexValenceBuffer,
ID3D11Buffer *quadOffsetTable,
ID3D11Buffer *patchTableBuffer,
int numVertexElements,
int numVaryingElements);
deviceContext1 - Direct3D11设备上下文。vertexBuffer - 输入顶点缓冲区。varyingBuffer - 输入变化缓冲区。vertexValenceBuffer - 包含每个顶点的边数。quadOffsetTable - 包含每个面的拆分位置偏移值。patchTableBuffer - 三角形面片拓扑表。numVertexElements - 顶点元素数量。numVaryingElements - 变化元素数量。void Evaluate(float u, float v, int patchIndex, float *vertexOutput,
float *varyingOutput);
u - 在曲面上的u坐标(范围[0,1])。v - 在曲面上的v坐标(范围[0,1])。patchIndex - 曲面上的补丁索引。vertexOutput - 输出顶点位置。varyingOutput - 输出变化值。void Bind();
将评估器绑定到Direct3D11设备上下文中。
static void Unbind();
从Direct3D11设备上下文中解除评估器绑定。
OsdD3D11ComputeEvaluator osdEvaluator(deviceContext1,
vertexBuffer,
varyingBuffer,
vertexValenceBuffer,
quadOffsetTable,
patchTableBuffer,
numVertexElements,
numVaryingElements);
osdEvaluator.Bind();
osdEvaluator.Evaluate(0.5f, 0.5f, 0, vertexOutput, varyingOutput);
OsdD3D11ComputeEvaluator::Unbind();
以上代码创建一个评估器对象,将其绑定到Direct3D11设备上下文中,然后通过Evaluate()方法计算曲面上指定点的顶点位置和变化值,最后解除绑定。