什么是图元?Primitive
说白了,就是一堆顶点集合。这些顶点描述了一个3维图形。 由3d max产出的模型,其实,就是一组图元,加上相关的光照、材质 等等属性 构成的。
通常,在D3D和OpenGL中,图元都由两个数组(或者叫buffer)来表示,一个叫顶点数组(vertex buffer ),一个叫索引数组(index buffer)。
Vertex buffer: 用来存放顶点的具体坐标原始数据的;
Index buffer: 用来存放各个图元顶点的索引号的,索引号匹配Vertex buffer
为什么要有顶点数组,还好再搞个索引数组出来呢??主要是因为,很多图元顶点可能会出现重叠,这时候,用顶点来表示的话,就比较浪费空间了。而,用索引数组来索引,看起来就清晰,而且高效。要知道,庞大的图元,在传输的时候,也是非常耗时的啊。。。。你只用相对轻松的更换索引数组,就可以画另一个三维物体了,而不用随时更新庞大的定点数组。
那么,图元在d3d中,是如何被绘制的呢?
1 首先,创建顶点和索引缓冲:
device->CreateVertexBuffer()
device->CreateIndexBuffer()
2 设定绘制状态:
device->SetRenderState()
3 设定数据流:
device->SetStreamSource()
4 设定顶点格式
device->SetFVF() //所谓FVF,就是指顶点格式,主要有 坐标、材质和纹理 几个量
5 设置索引缓冲
device->SetIndices()
6 绘制图元
device->BeginSceen()
device->DrawPrimitive9()
or
device->DrqwIndexedPrimitive()
device->EndScene()