兰州晓新信息技术工作室

专业致力于信息技术的应用和开发

用DirectX7.0开发3D效果

DirectX 7.0终於支援VB了,让我们这些VB的爱好者也能享受到DirectX带来的便利,现在我在这里提出使用DirectDraw的心得。使用DirectDraw时可以不用安装DirectX7.0的SDK,只要确定有装DirectX7.0就可以了。

现在我们实际来使用DirectDraw:
在“工程(Project)”里点选“设定引用项目”,来引用DirectX物件。
接著将“DirectX 7 for Visual Basic Type Library”的那一行打勾,就可以开始使用DirectX了。

我们首先得建立DirectDraw物件,先宣告一个Direct物件和一个DirectDraw物件:
Dim objDX As New DirectX7
Dim objDD As DirectDraw7

接下来是使用DirectDrawCreate函式来建立DirectDraw物件:
Set objDD = objDX.DirectDrawCreate("")

然后必须设定是视窗模式还是全屏幕模式:
Call objDD.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE)
第一个参数是设定DirectDraw的视窗是那一个,填入视窗的Handle代码而后面的参数是设定具备的能力,可以不止一个,使用Or组合起来。
DDSCL_FULLSCREEN 使用全屏幕(必须和DDSCL_EXCLUSIVE一起用)
DDSCL_ALLOWMODEX 使用Modex模式
DDSCL_EXCLUSIVE 使用独占模式
DDSCL_NORMAL 使用Windows的程式视窗
DDSCL_NOWINDOWCHANGES 禁止改变视窗大小

今天就先讲到这边,Direct实在很麻烦,一次不要太多比较好,下次就从建立Surface开始。  

设定完视窗模式或全屏幕模式后,如果你是设定成全屏幕模式的话(也就是独占模式),接著就必须设定显示模式。
objDD.SetDisplayMode 640, 480, 16, 0, DDSDM_DEFAULT
参数中的640,480指的是640x480的模式,而16指的是16万色,如果是8的话则是256色,想改变显示模式的话只要改变这三个变数就可以了,一般常用的模式有:
320x200 16万
320x240 256
640x480 256
640x480 16万

Surface简介:
Surface就是DirectDraw用的显示记忆体,图像就是要画在Surface上面,一般来说有分成几种类型。
primary surface 屏幕上可以看到的显示记忆体,图像画在上面就能显示在屏幕上。
backbuffer surface 这是一个能跟primary surface作快速切换的Surface。
offscreen surface 这是一个屏幕上看不见的Surface,可以用来存放图像。

我们现在就先来介绍建立primary surface的方法,首先得宣告一个Surface物件和一个DDSURFACEDESC结构。
Dim objDDPrimSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2

'DDSURFACEDESC主要是记录一个Surface的结构,像是Surface的高度、宽度之类的,建立一个primary surface通常只要填入ddsCaps就可以了。
ddsd1.lFlags = DDSD_CAPS '设定DDSURFACEDESC结构中的ddsCaps有效。
ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE '设定要建立的是primary suface。
Set objDDPrimSurf = objDD.CreateSurface(ddsd1) '呼叫CreateSurface后即建立完成。

'offscreen surface的建立法则是要设定DDSURFACEDESC结构中的ddsCaps、dwHeight、dwWidth。
Dim objDDOffSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2

ddsd1.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
'设定ddsCaps、lHeight、lWidth有效
ddsd1.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN '设定要建立offscreen surface
ddsd1.lWidth = 640 '设定Surface的宽度
ddsd1.lHeight = 480 '设定Surface的长度
Set objDDOffSurf = objDD.CreateSurfaceFromFile("img1.bmp", ddsd1)
'offscreen surface建立完成并把img.bmp图档读取到offscreen surface里面。

一般来说不会直接在primary surface上直接画图,我通常都是先在backbuffer surface上画,再利用切换的功能将Primary surface和backbuffer surface交换,所以在这里介绍backbuffer surface的建立方法,由於要跟primary surface一起建立,所以Primary surface的建立方法也就有点不同。
Dim objDDPrimSurf As DirectDrawSurface7
Dim objDDBackSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2

ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
'设定ddsCaps和lBackBufferCount有效
ddsd1.lBackBufferCount = 1 '设定Backbuffer surface的数量
ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
'设定要建立一个由primary surface和backbuffer surface 所构成的Surface
Set objDDPrimSurf = objDD.CreateSurface(ddsd1) 'primary surface建立完成

Dim caps As DDSCAPS2 宣告一个DDSCAPS结构
caps.lCaps = DDSCAPS_BACKBUFFER 设定要建立backbuffer surface
Set objDDBackSurf = objDDPrimSurf.GetAttachedSurface(caps) backbuffer suface 建立完成

Surface的部分讲完了,下一篇要说的是如何使用Blt和BltFast来作Surface间的图形的复制和搬移,就可以开始在Surface上画画罗。

上一次我们一共建立了三个Surface,分别是objDDPrimSurf(Primary surface)、objDDBackSurf(BackBuffer surface)、objDDOffSurf(Offscreen surface)。
现在我打算把objDDOffSurf拿来存放图片,再用BltFast()把图片给复制到objDDBackSurf上,然后用objDDPrimSurf的Flip来跟objDDBackSurf作交换的动作,因为objDDPrimSurf代表的就是显示记忆体,所以交换后图片就显示在屏幕上啦!

现在我先介绍BltFast()的用法:
BltFast(dx As Long,dy As Long,dds As DirectDrawSurface7,srcRect As RECT,trans As CONST_DDBLTFASTFLAGS) As Long

dx、dy
图形复制到目标Surface上的位置(座标)
dds
图片来源的Surface
srcRect
复制图形的范围
trans
复制图片的方式
DDBLTFAST_DESTCOLORKEY '使用目标Surface上的透明色
DDBLTFAST_NOCOLORKEY '直接复制图形
DDBLTFAST_SRCCOLORKEY '使用来源Surface上的透明色
DDBLTFAST_WAIT '若暂时无法执行的话就等到可以执行时

例:想把objDDOffSurf上640x480的图形复制到objDDBackSurf
Dim r1 As RECT

r1.left=0
r1.top=0
r1.right=640
r1.bottom=480

objDDBackSurf 0, 0, objDDOffSurf, r1, DDBLTFAST_WAIT

这样就把图形给复制到了objDDBackSurf上了,不过这样也只是在objDDBackSurf上而已,并不是在屏幕上,所以必须跟objDDPrimSurf作Flip才行,怎堋作呢?只要执行下面这一行就可以了:

objDDPrim.Flip Nothing, DDFLIP_WAIT

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/osion/article/details/1810889
个人分类: 软件开发技术
想对作者说点什么? 我来说一句

Directx7.0台球游戏

2011年01月21日 13.09MB 下载

DirectX 7.0 SDK

2016年02月04日 50MB 下载

WPF开发3D效果,附源码

2014年11月10日 5.14MB 下载

DirectX7.0

2016年10月03日 6.02MB 下载

delphiX D7 3d开发控件集

2017年12月01日 875KB 下载

没有更多推荐了,返回首页

不良信息举报

用DirectX7.0开发3D效果

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭