关于图元

来源:互联网 发布:php抽象类有什么用 编辑:程序博客网 时间:2024/04/28 14:30
      在三维图形领域中,一个立体物体我们经常是使用多组多边形来包围一个物体表面来近似的模拟物体的。如果有接触3DMAX,MAYA等3D
建模软件那更容易理解一些。我们的物体是中空的,仅表面上由一些面片拼接而成,而这些面片通常又是由一个一个更小的图元来构成的。

在D3D中,我们采用的多是三角形网格(Triangle Mesh)来进行拼接。
但是实际上D3D图元类型是分六种,三角形图元的创建方式也有三种。了解它们的
原理对我们优化程序算法有很大的好处。

点列集合    D3DPT_POINTLIST   一组点的集合
线列集合    D3DPT_LINELIST      一组线段的集合
线带集合    D3DPT_LINESTRIP    首尾相连的线段的集合
三角形列    D3DPT_TRIANGLELIST      一组三角形的集合
三角形带    D3DPT_TRIANGLESTRIP  首尾相连的三角形,有两个顶点重合
三角形扇    D3DPT_TRIANGLEFAN      组成扇形的一组三角形

1:绘制点是相当容易的,我们给出点的空间坐标,再分别绘制就好了
如:g_pD3DDevice->DrawPrimitive(D3DPT_POINTLIST, 0, 6);  //会绘制出6个点
恩,其中g_pD3DDevice是D3D设备指针,函数第一个参数是我们设置的灵活顶点格式结构,0是偏移量,设置为0代表从FVF结构中第一个顶点
开始绘制,6是从偏移量开始绘制6个图元。

2:线列
g_pD3DDevice->DrawPrimitive(D3DPT_LINELIST, 0, 3);  //会绘制出3个未必相连的线段
参数和点差不多了。这里系统会默认的将FVF结构中的第1个点和第2个点连接成一个线段,第3个点和第4个点连接成一个线段,如此反复,结
果我们得到的将是一系列未必连接的线段。

3:线带
g_pD3DDevice->DrawPrimitive(D3DPT_LINESTRIP, 0, 5); //会绘制出5个必定连接的线段
参数不说了,值得注意的是线带和线列区别在于,系统会默认的将第1,2个点连接之后,会再将2,3点连接,之后3,4点,如此类推,我们
得到的将会是一系列连接起来的线段,当然在相同点数下,获得线段会比线列多,

4:三角形扇
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 4); //会绘制出4个紧连的三角行
这个绘制的方法是0,1,2点绘制一个三角形,之后0,2,3点绘制一个三角形,之后是0,3,4。。。呃,还是一会画图好

5:三角行列
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2); //会绘制出2个不连接的三角形
这个绘制方法是0,1,2点绘制一个三角后,3,4,5点绘制一个三角。

6:三角形带
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 4); //会绘制出4个连接的三角形
这个绘制方法是0,1,2点绘制一个三角形,1,2,3绘制一个三角行,2,3,4绘制一个三角行。


原创粉丝点击