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()
方法计算曲面上指定点的顶点位置和变化值,最后解除绑定。