实例(instancing)绘制
应用场景:
这种方式无法减少被渲染的顶点的数量,但是可以降低带宽的压力,尤其是在绘制大量重复场景的时候具有得天独厚的优势。
?
原理:
在顶点buffer进入渲染管道的时候,并不是直接送给VS进行渲染,而是进入一个IA阶段。正是因为这个原因,才多了一次对顶点进行二次加工的机会。以下是从IA进入的数据:
?
IASetIndexBuffer?:索引缓冲区绑定到汇编器的输入阶段。
?
IASetInputLayout?:输入布局对象绑定到汇编器的输入阶段。
?
IASetPrimitiveTopology?:绑定信息的基本类型和数据顺序来描述的输入数据输入汇编阶段。
?
IASetVertexBuffers?:顶点缓冲区数组绑定到汇编器的输入阶段。
?
这里面IB是顶点的索引没啥好说的,PT的定义体元描述顶点绘制的形状的跟这个也没关系。VB是存储顶点的buffer,这里是s说明可以同时传递n个VB和1个IB。关键的是IL对输入的数据格式的定义。
?
immediateContext->IASetVertexBuffers(1, 1, &mInstanceBuff, &stride2, &offset);mContext->DrawIndexedInstanced(indexCount, instanceCount, 0, 0,0);文档说的不详细,只能靠别人的文章描述,或者自己的经验进行总结。这个暂时这个样了,以后了解的更深刻的时候补充
?
总结:在学习API的时候,最重要的不是用会了什么,而是了解了作者的意图是什么。只有了解 了作者的意图,你才能把整套API的体系打通。而一套API是否难学,也是看读者是否能够很容易理解作者的意图。VB是一个数据流,而IL是它的格式描述,IA阶段也正是根据IL的描述对VB的数据进行加工的。
?
?