讲到6.3点,索引和索引缓冲区了。
为了方便,在小点8说到的顶点函数用来创建缓冲区的函数也可以拿来用(泛型)。
在绑定视图的时候,和顶点不一样。
typedef struct D3D12_INDEX_BUFFER_VIEW
{
D3D13_GPU_VIRTUAL_ADDRESS BufferLocation;//位置
UINT SizeInBytes;//大小
DXGI FORMAT Format;//格式,但必须是DXGI_FORMAT_R16_UINT,或DXGI_FORMAT_R32_UINT两种类型。
}
D3D12_INDEX_BUFFER_VIEW idv;
ibv赋值。(以上3个)
mCommandList->IASetIndexBuffer(&ibv);//比起顶点的,少了前面两个参数。
画画
DrawIndexedInstanced(
UINT IndexCountPerInstance,//索引数量
UINT InstanceCount,//实例化技术相关。暂时为1
UINT StartIndexLocation,//指向索引缓冲区中的某个元素,将其标记为欲读的起始索引。
INT BaseVertexLocation,//在本次绘制调用读取顶点之前,为每个索引加上此整数值。**!!与顶点相关**这一条与顶点相关。
UINT StartInstanceLocation//实例化技术相关,暂时为0
);
特此注意一下,StartIndexLocation,是这个数据在全局缓冲区中的起始位置。如果在画立方体之前画了球体,那就是sphere起始索引+sphere的索引数量,再开始画box
而BaseVertexLocation则是有关于顶点的一个点。当我们要画box的时候,这个点也必须移到box的顶点位置才可以噢。