【VB】VB中DirectX绘图_DX基础以及绘图设备建立

DirectX函数库,就是Microsoft为开发游戏软件与高效率多媒体应用程序所开发出来的API。包含许多函数库模块,让以Window系统为平台的游戏或多媒体应用能获得更高的执行效率、强化3D图形成像以及丰富的声音效果。同时DirectX为程序开发人员提供了一套硬件驱动标准,不需要重新编写硬件驱动程序。

DirectX插件:运行期函数库和软件开发工具包(SDK)组成。用户执行DirectX技术所开发的应用时,程序会调用DirectX运行期的函数库来进行相关硬件的驱动控制(Win NT4.0后的操作系统都包含了运行期函数库)。Win DirectX SDK主要API控件:Direct3DD3D3D游戏开发标准,3D图像的处理工作。游戏运行时,需要3D绘图,D3D控件向显卡发出成像要求,让显卡完成图像的贴图操作。DirectDraw 负责2D图像处理,DX8.0以后两个绘图处理控件就合并到DirectGraphics里了。DirectSound 负责音频的处理,提供声卡的共同驱动标准,让应用程序可直接控制硬件的音频单元。DirectMusic 支持MIDI格式文件播放。DirectShow 多媒体文件播放的主要控件,比DsoundDmusic支持更多媒体格式。DirectInput 处理系统输入设备管理与控制,不通过操作系统直接对设备存取。DirectPlay 8.0新加入负责网络数据传输的控制与管理。

由于9.0以后的版本仅支持VB.NET,只能安装VB支持的最高版本8.X

VB中对DirectX插件的引用,工程-引用-选择DirectX 8 for Visual Basic Type Library

DirectGraphics中取消了2D图像绘制的DirectDraw控件,通过Direct3D来进行所有图像的绘制操作。使用D3D控件绘图一般流程是:

1.使用Direct3D,首先声明Direct3D对象(Direct3D8),D3D显示设备对象(Direct3DDevice8),图像显示模式(D3DdisPLAYMOD),D3D相关参数设置对象(D3DPRESENT_ParaMETERS),用于硬件信息保存的D3DCAPS8数据类型变量。

2.D3D是控制显示硬件绘图操作的主要成员,D3D对象的建立:

Set myD3D = myDX.Direct3Dcreate()

3.在窗口中使用D3D的绘图功能,首先要用D3D myD3D内置的GetAdapterdisplayMode命令将窗口显示模式信息保存到所设置的D3DdisPLAYMODE数据类型变量myMode中。

myD3D.GetAdapterdisplayMode D3DADAPTER_DEFAULT,myMode

4.可以利用D3DPRESENT_ParaMETERS数据类型变量myPP改变D3D对象内所设置的数据值:

Windowed是否为窗口模式,0代表全屏显示

SwapEffect设置换页模式

BackBufferFormat设置背景缓冲区格式(BackBufferCount背景缓冲区数量BackBufferHeightWidth背景缓冲区高度和宽度)。

5.获取硬件支持内容,计算机的硬件设备都不同,在配置D3Ddevice显示设备对象之前需要先获得用户显示硬件的支持信息。可以通过D3D对象的getDeviceCapsh函数将硬件支持信息保存到D3DCAPS数据类型变量myCap中。两个参数分别为设备名称和设备类型

myD3D.GetDeviceCaps D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,myCap

D3DADAPTER_DEFAULT认的计算机显示设备标识名称

D3DDEVTYPE_HAL,指定设备的使用类型为硬件层。(_REF软件模拟 _SW不支持)。

然后将getDeviceCaps获得的支持信息设置到myflag上。

6.建立D3Ddevice8对象,D3Ddevice8负责对指定显卡执行各种图形显示的控制,一个对象相对于一个显卡的控制接口。一般一个pc一个显示输出设备所以一般建立一个D3Ddevice8对象。

Set myDev = myD3D.CreateDevice(Adapter,DeviceType,FocusWindow,BehaviorFlags,PresentationParameters)

Adapter为使用的适配器工程。同获取硬件信息时的设备名称

DeviceType为设备类型,同获取硬件信息时参数。

FocusWindow 指定Device对象使用的窗口。

BehaviorFlags 为对象行为控制标识myFlag

PresentationParameters 保存D3D对象

Set myDev = myD3D.CreateDevice(D3DADAPTER_DEFAULT,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,myPP)

7.场景在BeginSceneEndScene两命令直接进行,所有图像的加载,移动,显示删除等控制设置。

'场景安排设定

myDev.BeginScene

....

myDev.Clear 0,ByVal 0,D3DCLEAR_TARGET,&H0&,1#,0 '清除画面

myDev.SetTexture 0,myBMP 设置指定图像

myDev.DrawPrimitiveUP D3DPT_TRIANGLESTRIP,2,myVertex(0),mySize

'绘出文字
myD3DX.DrawText myFont,&HFFFF0000,myStr1,myArea1,DT_RIGHT
myFont.DrawTextW myStr2,-1,myArea2,DT_LEFT,&HFF00FF00

....

'此处仅列举几种绘制操作 可以加载的代码

myDev.EndScene

8.'输出显示,利用D3Ddev对象内置的Present命令将前面场景中设置的操作依次输出示。

myDev.Present ByVal 0,ByVal 0

参数:SourceRect源矩阵,DestRect目标矩阵。用户换页状态除了D3DSWAPEFFECT_copY或在copY_VSYN时都设为ByVal 0DestwindowOverride目标窗口重载模式,为0代表使用D3DPERSENT_ParaMETERS变量设置的hWndDeviceWindow属性DirtyRegion一般不使用设0

9.一般在程序结束时需要将建立的对象释放以免浪费资源。

Set myDX = nothing

Set myD3D = nothing

Set myDevice = nothing

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...