今天看了indexBuffer,为了加深记忆,我现在把学到的识知识总结一篇,欢迎大家指正我理解有错的地方。前面使 用VertexBuffer渲染了一个立方体,我用的是TriangleStrip,共用了18个顶点。而事实上,我们的立方本只有8个顶点 ,以前的渲染方法尽足足多了10个顶点,对于像立方体这像一个小的实体来说,这并不会降低我们的执行效率和占用太 大的空间,但是,如果对于一个成千上万的顶点的实体来说,重复使用顶点可是一个不大的开销!如何减小开销呢?可 以使用IndexBuffer。它为每个顶点建立了一个索引,需要渲染顶点时,我们通过索引,可以重复使用某个顶点. 首先,还是先建立VertexBuffer,但这次VertexBuffer中只存8个顶点,即我们立方体的8个顶点.然后建立我们的索引属性indices: private short[] indices={ 0,1,2, 3,4,5, 6,7,0, 1,1,7, 3,5,0, 6,2,4}; 在实例化VertexBuffer后,我们同时在下面实例化IndexBuffer,具体构造方法的参数可参见SDK,与VertexBuffer差不多.如: indexBuffer=new IndexBuffer(typeof(short),indices.Length,device,Usage.WriteOnly,Pool.Default); 第一个参数是索引数组的类型,为short,第二个为数组长度,后面的….嘿嘿和VertexBuffer一样。实例化后,立即响应Created事件, 在里面将我们的indices指定到IndexBuffer中,用SetData方法,如: IndexBuffer ib=(IndexBuffer)sender; ib.SetData(indices,0,LockFlags.None); 这样索引顶点的建立和初始化都完成了,下面就是渲染了。 使用索引顶点渲染的方法是:Device. DrawIndexedPrimitives 参数不说了吧,SDK说得清清楚楚的。
我叙述得对不对?不对的话,请指出,谢谢! 
|