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图像,图像的颜色权重之类。具体的标志如下:
因为我们本次所需要创建的是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个三角形,所以不能很直接体现出连线方式。不过你可以自己多添加几个点试试。
好的最后将这一部分放置到我们第一节所空缺的渲染部分中。运行试一试,是不是得到了一个冷色调的三角形。你也可以修改一下颜色,让三角形更色彩化。
这一节我们所将了2D的平面绘图,下一节我们将会涉及到3D中的数学知识-线性代数。矩阵的转换,为3D打下基础。
同时附上课程源码:
点击→ http://pan.baidu.com/s/1c0nrTQS
- VB+DX游戏编程教程 第二话:点的艺术
- VB+DX游戏编程教程 第三话:多变的矩阵
- VB+DX游戏编程教程 第四话:多彩的纹理
- VB+DX游戏编程教程 第一话:初识DX
- VB+DX游戏编程教程 第五话:2D精灵
- SDL游戏开发系列第二话:基本图形的绘制
- 曾哥传(第二话 村长的神器)
- Android简易实战教程--第二话《两种进度条》
- 游戏DX接管的研究
- 第二话-策略模式
- Verilog下的图像处理--第二话--downsample
- 大话Spring源码【第二话】-Spring的风雨辉煌
- e6第二话关于赋值的那些事 结构赋值
- 打造轻量级Windows Phone7 游戏引擎-Samurai 第二话(上) Inputs 问题提出篇
- 打造轻量级Windows Phone7 游戏引擎-Samurai 第二话(中) Inputs 问题解决篇一
- 菜鸟学习S3C2440bootloader第二话
- Docker原理第二话--Namespace
- 实现DX游戏的键盘鼠标操作
- php json_decode函数
- swift的控制语句
- 简单的WinInet编程
- 【学习笔记】大数阶乘
- arcengine栅格渲染(栅格重分类) IRasterClassifyColorRampRenderer
- VB+DX游戏编程教程 第二话:点的艺术
- HDU 5119 Happy Matt Friends 2014ACM/ICPC亚洲区北京站
- hdu 4038 Stone(贪心模拟)
- vmstat
- R语言包_dplyr_1
- Leetcode230 Kth Smallest Element in a BST
- uva 10441 - Catenyms(欧拉通路)
- Android + sqlite simplecursorAdapter Demo
- Ios-UITableView