【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, D3DDEVTYPE_HAL, 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, 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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值