3D游戏基础 Direct3D(四) 固定管线绘制图元

什么是图元?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()

阅读更多
上一篇 3D游戏基础 Direct3D(三) 固定管线之变换
下一篇3D游戏基础 Direct3D(五) 固定管线之"光"(1):光的分类与材质
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭