VB+DX游戏编程教程 第二话:点的艺术

来源:互联网 发布:原生js移除classname 编辑:程序博客网 时间:2024/04/29 08:28

   本博客所有内容均来源于  http://www.uoyo.net     。 高手还请多多包涵。

   经过我们上一节的学习。我们已经可以初始化一个D3D设备了。好的,我们先来回顾一下这个步骤,毕竟这是我们每次都会用到的一个步骤。初始化DirectX8根接口→实例化Direct3D→创建Direct3DDevice设备。是不是很简单。

    今天我们要讲的是在D3D中占有很大地位的“点(Vertex)”。在上一节我说过,D3D中最基本的单位是三角形,我们很清楚的知道正方形是由两个三角形组成的,而正六边形是由6个正三角形组成的。可以说三角形可以随意组成我们所看到的任何事物。当然无数个三角形也可以组成一个圆。所有今天我们的目的就是在屏幕上能够绘制出一个简单的三角形出来。

    首先用我们第一节的知识,创建好D3D设备。用D3D 设备,从而控制:鼠标、纹理、图元、材质、灯光、缓冲区、阴影、渲染等。然后在顶定义一个变量 比如 Dim ID3DVertBuffer As Direct3DVertexBuffer8。就如图名字一样,它的作用是我们在D3D中存放我们的顶点缓存。我们将自己所设置的顶点信息保存在缓存中,从而让D3D绘制出来。那么Direct3DVertexBuffer8是怎么创建的呢? 我们来看一看VB中的创建提示: 

'Direct3DDevice.CreateVertexBuffer LengthInbytes,Usage,FvF,Pool/const_d3dpool

LengthInbytes:第一个参数,是我们所要创建的顶点的大小

Usage :设置为0

FVF   :可变换顶点格式,将在下面我们重点介绍

Pool  :设置为D3DPOOL_DEFAULT

FvF是我们重点关注的对象,可变换顶点格式。用于构造自定义顶点数据,也就是告诉我们的D3D我们要创建2D还是3D图像,图像的颜色权重之类。具体的标志如下:

QQ截图20150902223326.jpg

因为我们本次所需要创建的是2D,有颜色的三角形。所有我们可以将FVF格式设置为D3DFVF_XYZRHW + D3DFVF_DIFFUSE。然后我们需要自定义一个数据类型,用来设置为顶点数据的格式,我们既需要坐标有需要颜色和权重。所以Type VertFormat
    xyz As D3DVECTOR
    rhw As Single
    color As D3DCOLORVALUE
    End Type

然后我们设置三个顶点Vert(2) as VertFormat 格式。然后为三个顶点赋值:

   VERT(0).xyz = Vec(100, 90, 1):  VERT(0).color = Colorvalue(0.7, 0.5, 0, 1): VERT(0).rhw = 1
   VERT(1).xyz = Vec(400, 400, 1): VERT(1).color = Colorvalue(1, 0.5, 0.5, 1): VERT(1).rhw = 1
   VERT(2).xyz = Vec(100, 400, 1): VERT(2).color = Colorvalue(0.6, 0.2, 0.2, 1): VERT(2).rhw = 1

其中Vec和Colorvalue为我们自定义的函数,用于方便输入坐标信息和颜色信息。具体内容可以查看本文下方源代码。设置好了之后我们就可以创建顶点缓存了不是吗?

Set ID3DVertBuffer = IDX3Device.CreateVertexBuffer(3 * Nsize, 0, D3DFVF_XYZRHW + D3DFVF_DIFFUSE, D3DPOOL_DEFAULT)   

然后我们需要用我们设置好的顶点信息数组去填满这个缓存区,然它里面包含我们所需要的信息。

D3DVertexBuffer8SetData ID3DVertBuffer, 0, 3 * Nsize, 0, VERT(0)

参数很简单我也就不用说了。其实在C语言里面是直接用的指针方式填满,但在VB里面没有过多的涉及到指针的概念所以直接用此函数赋值。

然后将我们所以的顶点给渲染器,这一步我们称为顶点数据流。 

IDX3Device.SetStreamSource 0, ID3DVertBuffer, Nsize     'Nsize = len(vert(0))

然后就是让D3D设备将我们所做的一切画出来了 

IDX3Device.DrawPrimitive D3DPT_TRIANGLELIST, 0, counts

这里涉及到一个连线的方式,也就是第一个函数。具体内容我们可以见下表,因为我们本次所涉及的是2D的三角形,而且也只有三个点也就只能形成1个三角形,所以不能很直接体现出连线方式。不过你可以自己多添加几个点试试。

QQ截图20150902224440.jpg

好的最后将这一部分放置到我们第一节所空缺的渲染部分中。运行试一试,是不是得到了一个冷色调的三角形。你也可以修改一下颜色,让三角形更色彩化。

这一节我们所将了2D的平面绘图,下一节我们将会涉及到3D中的数学知识-线性代数。矩阵的转换,为3D打下基础。

同时附上课程源码:

点击→    http://pan.baidu.com/s/1c0nrTQS


0 0
原创粉丝点击