VB6编程:DirectX 2D图形学习日志9对4-6课的总结
教程下载地址:https://download.csdn.net/download/gosub60/13696651
第6课创建顶点缓冲区,重点内容如下:
**一 顶点缓冲区:**在2D或3D的游戏里,物体模型是用多边形网格来描述的,一般的是三角形,顶点缓冲区就是来存储用来描述物体模型的所有多面形的顶点的信息,这些信息有顶点的三维坐标,顶点颜色,顶点法向量,纹理坐标等。
二使用顶点缓存分为四步:
1.需要定义一个顶点格式类型,用来说明你的顶点中有哪些信息,在4-6课中,顶点类型是这样定义的:灵活顶点格式 ( Flexible Vertex Format )FVF
'2D(已转换和已点亮)顶点格式类型。
Private Type TLVERTEX
X As Single'屏幕位置坐标X
Y As Single'屏幕位置坐标y
Z As Single''屏幕位置坐标Z
RHW As Single'RHW是顶点在投影空间中存在的齐次点(x,y,z,w)的W坐标的倒数。
Color As Long'顶点颜色
Specular As Long'镜面高光
TU As Single'纹理坐标
TV As Single'纹理坐标
End Type
TLVertex类型介绍更多的信息请参考官方说明文档。
上述声明了一个有效的经过变换和光照的顶点,该顶点具有漫反射和镜面反射的顶点颜色,以及一组纹理坐标。x和y值必须在屏幕坐标中,并且z必须是要在z缓冲区中使用的像素的深度值。Z值的范围可以从0.0到1.0,其中0.0是距离用户最近的位置,而1.0是在查看区域内仍可见的最远位置。紧随该位置之后,变换后的顶点和照亮的顶点必须包括均等W(RHW)值的倒数。RHW是顶点在投影空间中存在的齐次点(x,y,z,w)的W坐标的倒数。该值通常是沿着Z轴的从视点到顶点的距离。
顶点结构完成后,我们需要描述通过结合使用灵活顶点格式(FVF)标志来格式化顶点的方式。
'2D(转换和点亮)顶点格式。
'此顶点的顶点格式描述为
'(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1)
Private Const FVF_TLVERTEX As Long = D3DFVF_XYZRHW Or D3DFVF_TEX1 Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR
常用的灵活顶点格式的取值及含义如下:
D3DFVF_XYZ——顶点的三维坐标(分别代表X,Y,Z坐标),表示有位置,而且需要进行矩阵变换(世界,投影,视口,取景)和设置摄像机位置才能在屏幕上显示;
D3DFVF_XYZRHW——即平时所说rhw,它说明顶点有位置,而且经过了矩阵变换,不用再由Direct3D对它进行变换,通常用于做UI(用户界面);
D3DFVF_DIFFUSE——表示顶点格式中有漫反射颜色(这涉及到顶点数据格式的设置),同时,必须开启了光照才能看到设置的颜色,否则是本色(一般是白色)的;
D3DFVF_NORMAL——表示顶点有法线向量;
D3DFVF_TEX*——表示顶点有纹理坐标,*可以是1至8,表示有多少套纹理坐标
D3DMFVF_SPECULAR——顶点包含一个32位ARGB颜色值,用作其镜面反射颜色值。
2.创建顶点缓存:使用的函数是 CreateVertexBuffer,函数原型c++代码:
HRESULT IDirect3DDevice9::CreateVertexBuffer(
UINT Length, //顶点缓冲区的大小
DWORD Usage, //顶点缓冲区的用法
DWORD FVF, //可变的顶点格式(灵活顶点格式)
D3DPOOL Pool, //顶点缓冲区所使用的内存池类型
IDirect3DVertexBuffer9** ppVertexBuffer, //顶点缓冲区的指针
HANDLE* pSharedHandle //保留字,设置为NULL
); //创建顶点缓冲区
相关参数介绍一下:
参数1:Length(顶点缓冲区的大小),以字节为单位。对于灵活的顶点格式(FVF)顶点缓冲区,Length必须足够大以包含至少一个顶点,并且必须是顶点大小的倍数。
参数2:Usage(顶点缓冲区的用法),来自