ID3DX10Mesh::D rawSubsetInstanced 方法
绘制网格的同一子集的多个实例。
语法
HRESULT DrawSubsetInstanced(
[in] UINT AttribId,
[in] UINT InstanceCount,
[in] UINT StartInstanceLocation
);
参数
-
AttribId [in]
-
类型: UINT
指定要绘制的网格子集。 此值用于区分网格中属于一个或多个属性组的人脸。 请参阅备注。
-
InstanceCount [in]
-
类型: UINT
要呈现的实例数。
-
StartInstanceLocation [in]
-
类型: UINT
要从标记为实例数据的每个缓冲区中开始提取的实例。
返回值
类型: HRESULT
返回值是 Direct3D 10 返回代码中列出的值之一。
备注
网格包含属性表。 属性表可以将网格划分为多个子集,其中每个子集都使用属性 ID 进行标识。 例如,包含 200 个面的网格(分为三个子集)可能具有如下所示的属性表:
Subset | 面 |
---|---|
AttribID 0 | 人脸 0 ~ 50 |
AttribID 1 | 人脸 51 ~ 125 |
AttribID 2 | 人脸 126 ~ 200 |
实例化可以通过重用相同的几何图形在场景中绘制多个对象来扩展性能。 实例化的示例之一是绘制具有不同位置和颜色的同一对象。 索引需要多个顶点缓冲区:至少一个用于每个顶点数据,另一个缓冲区用于每个实例数据。
使用 DrawSubsetInstanced 绘制实例的过程与 ID3D10Device::D rawIndexedInstanced 使用的过程非常相似,如 实例化示例中所述。 使用 DrawSubsetInstanced 时的主要区别在于,必须先从 ID3DX10Mesh Interface 对象中提取顶点缓冲区和索引缓冲区,然后才能合并实例化数据。
以下代码演示如何从网格对象中提取顶点缓冲区和索引缓冲区。
ID3D10Buffer* vertexBuffer;
pDeviceObj->pMesh->GetDeviceVertexBuffer(0, &vertexBuffer);
ID3D10Buffer* indexBuffer;
pDeviceObj->pMesh->GetDeviceIndexBuffer(&indexBuffer);
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|
另请参阅