`
hanbaohong
  • 浏览: 407487 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

DirectX7.0使用心得

    博客分类:
  • VB
阅读更多

http://weilams.blogbus.com/logs/1115463.html

 

 

DirectX7.0使用心得(1)
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 禁止改变视窗大小

 

---------------

设定完视窗模式或全屏幕模式后,如果你是设定成全屏幕模式的话(也就是独占模式),接著就必须设定显示模式。
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

分享到:
评论

相关推荐

    精彩编程与编程技巧-DirectX7.0使用心得(1)...

    ### 精彩编程与编程技巧:DirectX7.0使用心得 在计算机图形学领域,DirectX一直是不可或缺的一部分,尤其是对于游戏开发人员而言。DirectX7.0作为早期版本之一,虽然现在已经不是最新的技术标准,但对于理解DirectX...

    精彩编程与编程技巧-DirectX7.0使用心得(2)...

    ### 直接编程技巧:DirectX 7.0 使用心得详解 #### 一、DirectX 7.0 概述 DirectX 7.0 是 Microsoft 推出的一款用于 Windows 平台上的多媒体编程接口,它包括了一系列 API,用于简化游戏和其他多媒体软件的开发...

    精彩编程与编程技巧-DirectX7.0使用心得(3)...

    ### DirectX 7.0 使用心得:Surface管理与BltFast方法详解 #### Surface概念解析 在DirectX 7.0编程中,Surface是用于表示屏幕图像的基本单元,包括主表面(Primary Surface)、后缓冲表面(Back Buffer Surface)...

    DirectX 7.0a .h .lib

    在这个压缩包中包含的是DirectX 7.0a的头文件(.h)和库文件(.lib),它们是开发者在使用DirectX 7.0a编程时需要引用的关键组件。 头文件(.h)通常包含了函数声明、结构体定义和其他编程元素,供编译器在编译源...

    directx7.0sdk完整SDK,亲测可用

    DirectX 7.0 SDK(Software Development Kit)是微软为开发者提供的一套工具和库,主要用于创建使用DirectX技术的游戏和多媒体应用程序。这套SDK包含了开发DirectX 7.0应用程序所需的头文件、库文件、文档、示例代码...

    DirectX7.0

    DirectX7.0,英文版,用于Windows95.

    DirectX 7.0 SDK 02

    DirectX 7.0 SDK 含有三个压缩包 要下载全了一起压缩 希望大家可以认真评价 如有不足之处-我会及时更新增加新的资料

    directx 7.0

    已经是非常精简的版本了

    DirectX 7.0 SDK 03

    DirectX 7.0 SDK 含有三个压缩包 要下载全了一起压缩 希望大家可以认真评价 如有不足之处-我会及时更新增加新的资料

    Delphi Graphics And Game Programming With Directx 7.0

    《Delphi Graphics And Game Programming With Directx 7.0》这本书是专为Delphi开发者设计的一本技术指南,深入探讨了如何使用DirectX 7.0进行图形和游戏编程。DirectX是由微软开发的一组应用程序接口(API),主要...

    directx7.0sdk中的帮助文档

    最近在看《Windows游戏编程大师技巧(第二版)》,其中...由于DirectX用的是COM技术,如果您使用的是高版本的DirectX,那么不用去下载DirectX7.0,使用现有版本就可以。需要了解函数信息時,查看一下这个文档就可以。

    nvidia 支持3d显卡的directx 7.0 demo

    DirectX 7.0是微软开发的一套用于Windows操作系统中的多媒体编程接口,它极大地促进了图形、音频和输入设备在游戏和应用程序中的性能。NVIDIA作为知名的显卡制造商,其产品线广泛支持DirectX 7.0,以提供卓越的3D...

    directx7.0 英文版 for win95 win98 winme

    对于那些使用Windows 95、98或ME的老机器来说,DirectX 7.0是一个必要的升级,因为许多当时流行的游戏都需要这个版本或更高版本的DirectX才能运行。文件名DX70eng.exe就是DirectX 7.0英文版的安装程序。 安装...

    精彩编程与编程技巧-用VB编写DirectX7.0游戏(上)...

    ### 使用VB编写DirectX7.0游戏:关键技术与实践 #### 一、DirectX7.0 SDK安装与配置 在开始使用Visual Basic (VB) 开发DirectX7.0游戏之前,首先需要安装DirectX7.0的SDK(Software Development Kit)。DirectX7.0...

    direct7.0,DX7.0

    DirectX 7.0,简称DX7,是微软推出的一款重要的图形和多媒体编程接口,它在1998年发布,主要用于Windows 98等早期操作系统。DirectX是一系列技术的集合,旨在提供游戏和多媒体应用程序所需的高性能硬件加速功能。这...

    Directx7.0台球游戏

    在本例中,“Directx7.0台球游戏”是一款利用DirectX 7.0技术实现的台球小游戏,它展示了DirectX在游戏开发中的应用。 1. **DirectX 7.0基础知识**: - **DirectDraw**:负责2D和3D图形渲染,包括硬件加速功能,能...

    精彩编程与编程技巧-用VB编写DirectX7.0游戏...

    ### 使用VB编写DirectX7.0游戏:精彩编程与编程技巧 #### 一、DirectX7.0简介 DirectX7.0是微软推出的一款针对多媒体应用开发的强大工具包,相较于之前的版本DirectX6,DirectX7进行了大幅度的升级与改进。在...

    利用DirectX7.0实现图像全屏幕显示.rar_directx7_full

    DirectX 7.0是微软开发的一套用于Windows平台的游戏和多媒体编程接口,它提供了丰富的图形处理能力,包括2D和3D图形渲染、音频处理等功能。在本教程中,我们将探讨如何利用DirectX 7.0来实现图像的全屏显示。 全屏...

Global site tag (gtag.js) - Google Analytics