昨天下午画出第一个D3D下的三角形,二个小时候画出第一个平行四边形。虽然粗糙点,但还算有点成绩,哈哈。
绘制前需要掌握的一些知识。
一、顶点(Vertex):D3D中的一个坐标点。坐标点由(x,y,z)三个坐标值来定位。
二、FVF(Flexible Vertex Format):自由顶点格式,也有资料叫灵活顶点格式。反正都查不多。意思就是根据自己的需要,自己来定义一个记录顶点信息的结构体。
注:虽然自己能做了,但是对这个东西确实有点是是而非的理解。D3D凭什么能从一个内存区域中识别我的格式定义?OK,SetFVF的参数中已经指定了结构体中包含的有哪些字段,但是字段的顺序呢?我声明了 D3DFVF_XYZRHW 标记,但是如果我的结构体定义的字段是a,b,c,rhw怎么办,或者我不按顺序,弄个x,rhw,z,y,他也可以正确识别吗?就我现在那点C++基础,还是不去深究这个问题了,不过早晚会有一天,我要把这个问题挖出个根出来的。
三、顶点缓冲(Vertex Buffer):据说有2种缓冲,不过暂时接触的就这一钟了,其实就是用来存储一个顶点结构体的数组。为了定义并使用这个顶点缓冲,需要由至少3个函数配合使用,依次如下:
1.CreateVertexBuffer:创建一个顶点缓冲区
2.SetStreamSource:绑定一个顶点缓冲区到指定的着色寄存器内。一个DirectD3DDrive可以最多拥有16个着色寄存器;
3.SetFVF:设置d3d着色寄存器中顶点数据的格式。
四、绘制操作。貌似很多D3D的绘制都这个叫 DrawPrimitive 的函数,函数的第一个参数是一个枚举值,分别如下:
D3DPT_POINTLIST
点列表:将一连串的顶点作为像素进行绘制
D3DPT_LINELIST
线列表:彼此孤立(彼此没有发生连接)的一些直线
D3DPT_LINESTRIP
线带:一连串连接的直线。每条直线都是从前一个顶点到当前顶点绘制而成,很像连接点
D3DPT_TRIANGLELIST
三角形列表:索引区每隔三个一个三角形。
D3DPT_TRIANGLESTRIP
三角形带:索引区中每三个一个三角形,前一个三角形的后两个顶点和后一个三角形的前两个顶点重合。即绘制的第一个三边形使用3个顶点,后面绘制的每一个三角形只使用一个额外的顶点。
D3DPT_TRIANGLEFAN
三角扇形:索引区中第一个点为公共顶点,后面依次展开,每两个点和公共定点组成三角形。
D3DPT_FORCE_DWORD
还不清楚干什么用。