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

OpenSubdiv.OPENSUBDIV_VERSION.Osd.D3D11ComputeEvaluator

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