DirectX函数库,就是Microsoft为开发游戏软件与高效率多媒体应用程序所开发出来的API。包含许多函数库模块,让以Window系统为平台的游戏或多媒体应用能获得更高的执行效率、强化3D图形成像以及丰富的声音效果。同时DirectX为程序开发人员提供了一套硬件驱动标准,不需要重新编写硬件驱动程序。
DirectX插件:运行期函数库和软件开发工具包(SDK)组成。用户执行DirectX技术所开发的应用时,程序会调用DirectX运行期的函数库来进行相关硬件的驱动控制(Win NT4.0后的操作系统都包含了运行期函数库)。Win DirectX SDK主要API控件:Direct3D(D3D)3D游戏开发标准,3D图像的处理工作。游戏运行时,需要3D绘图,D3D控件向显卡发出成像要求,让显卡完成图像的贴图操作。DirectDraw 负责2D图像处理,DX8.0以后两个绘图处理控件就合并到DirectGraphics里了。DirectSound 负责音频的处理,提供声卡的共同驱动标准,让应用程序可直接控制硬件的音频单元。DirectMusic 支持MIDI格式文件播放。DirectShow 多媒体文件播放的主要控件,比Dsound和Dmusic支持更多媒体格式。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背景缓冲区数量,BackBufferHeight和Width背景缓冲区高度和宽度)。
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.场景在BeginScene和EndScene两命令直接进行,所有图像的加载,移动,显示删除等控制设置。
'场景安排设定
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 0。DestWindowOverride目标窗口重载模式,为0代表使用D3DPERSENT_PARAMETERS变量设置的hWndDeviceWindow属性。DirtyRegion一般不使用设0。
9.一般在程序结束时需要将建立的对象释放以免浪费资源。
Set myDX = Nothing
Set myD3D = Nothing
Set myDevice = Nothing