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数据类型变量。
'Direct3D相关对象 Dim myDX As New DirectX8 Dim myD3D As Direct3D8 Dim myDev As Direct3DDevice8 Dim myMode As D3DDISPLAYMODE Dim myPP As D3DPRESENT_PARAMETERS Dim myFlag As Long Dim myCap As 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对象内所设置的数据值:
myPP.Windowed = 1 myPP.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC myPP.BackBufferFormat = myMode.Format
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上。
'设定标识变量 If myCap.DevCaps And D3DDEVCAPS_PUREDEVICE Then myFlag = D3DCREATE_PUREDEVICE Else If myCap.DevCaps And D3DDEVCAPS_HWTRANSFORMANDLIGHT Then myFlag = D3DCREATE_HARDWARE_VERTEXPROCESSING Else myFlag = D3DCREATE_SOFTWARE_VERTEXPROCESSING End If End If
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, D3DDEVTYPE_HAL, 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, 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