DirectDraw7学习笔记(2)---DirectX开发环境配置及工作方式

注:如果有朋友直接拷贝或转载引用我的文章,我并不反对,也无须得到我的同意,但请在转载引用的时候注明作者.

作者:蒋志强

前言

前一篇文章简要的介绍了DirectX的基本概念及COM的相关基本概念,这次将在上次的基础上介绍一下如何配置DirectX的开发环境,以及其他DirectX的基本知识.

配置DirectX的开发环境

我们已经知道,由于DirectX的实现在DLL中,只要有*.lib文件及相应语言的头文件,可以在不同的开发语言中使用,但由于我自己是以VC6为开发工具来学习的,而且这也是目前使用DirectX最常见的开发环境,所以我以VC6为例,并且后面其他的DirectDraw7学习笔记也是以VC6为开发环境.

虽然我们只要*.lib及头文件(对C/C++来说就是*.h文件)并把DirectX的DLL拷贝到系统文件目录下(也就是安装操作体统的那个盘下的windows目录下的system32目录),就可以在VC6开发环境下使用DirectX了.但自己手工操作容易遗漏或出错,特别容易打击象我一样初学者的激情,所以建议安装DirectX的SDK的安装文件,他会自动的安装*.lib和*.h文件以及DLL而且还会安装相应的帮助文档以及很多示例程序,这些东西在以后的学习中会非常有用.DirectX的SDK安装程序在微软的主页上可以下载得到,你可以下载最新的9.0版本或者低一些的版本(比如7.0因为在我的学习笔记中只用到DirectDraw7).

安装完成后,在VC6中还要进行以下设置才能在VC6开发环境能够成功的使用DirectX:1在VC6开发工程环境中选择"工具"菜单中的"选项",将弹出一个对话框,选择"目录"标签,在目录中添加你安装DirectX的目录下的include目录,在这个目录中包括了VC6中使用DirectX的*.h文件,这样就可以保证VC6在编译的时候可以找到DirectX的头文件;2选择"工程"下的"设置"项,将弹出"工程设置"对话框,选择"链接"标签,在该标签下有"对象/库模块"输入文本框,在通常情况下文本框内已有"kernel32.lib user32.lib gdi32.lib"等默认的导入库文件,在其中添加一个ddraw.lib然后点击确定,这样就设置好了DirectDraw的导入库文件,我们的程序在链接的时候就是通过ddraw.lib文件提供的信息将DLL文件与我们自己的目标代码进行链接的.

至此,VC6环境下的DirectDraw开发环境就配置好了,因为我的学习笔记只讲了DirectDraw,所以在设置导入库文件时只添加了ddraw.lib,如果要使用DirectX中的其他组件比如Direct3D可以类似的在设置导入库文件时添加d3d9.lib.由于我是使用DirectX SDK安装程序进行的安装所以DLL已经被拷贝到了系统目录下,在系统盘下的WINDOWS目录下的system32目录中的d3d8.dll,d3d9.dll等文件就是DirectX的DLL文件.为了测试开发环境是否正确配置了,可以在VC6中新建工程,新建一个Win32 Application,在WinMain函数所在文件的开头添加包含语句"#include "ddraw.h"然后在函数外设置全局变量"LPDIRECTDRAW7 lpDD;",然后运行程序确定程序可以正常运行,没有报错,则可以确定开发环境已经正确的配置了."#include "ddraw.h"可以确定头文件包含目录已经正确设置了,"LPDIRECTDRAW7 lpDD;"定义了一个DirectDraw7对象的指针,虽然什么事情都没有干,但已经确定了*.lib文件和相应DLL已经正确设置好了,否则不可能成功链接运行.

DirectX的基本知识

配置好了开发环境就可以在我们的程序中使用DirectX了,但首先我们要了解一下DirectX工作方式,这很重要.我们进行windows平台上的程序开发都是通过系统提供的API函数取得服务,API以也DLL形式存在于系统文件目录下(和我们刚才安装的DirectX的DLL在一个目录中),操作系统以API的形式为应用程序提供服务.但PC机器上的各种设备,不同厂家的设备都各不相同,因此硬件设备要正常工作都需要相应的驱动程序,驱动程序才可以真正操作计算机的硬件,API通过向硬件驱动程序取得服务,向上层的应用程序提供统一的操作硬件的接口.在使用DirectX来操作PC硬件的时候情况发生了变换,DirectX提供的接口中的方法在我们的程序中被调用,但硬件未必能够直接支持被要求提供的功能,这时候DirectX提出了HEL(Hardware Emulation Layer硬件仿真层)和HAL(Hardware Abstraction Layer硬件抽象层的概念),这两个层对我们程序员是透明的,也就是不是由我们程序员指定通过哪个层来完成功能调用,而是由系统自己选择的.提出这两个层的原因是这样的:也许你的PC中的显卡是Geforce 3 ,只硬件支持DirectX8.1,而你的女朋友的PC使用X700,硬件完全支持DirectX9的所有功能,而我的显卡是集成的GMA 900,硬件仅支持Direct9的部分功能.在这种情况下,有个游戏使用了DirectX9中的最新功能,在这种情况下对于最新的那些功能,你女朋友的主机直接通过硬件提供(HAL),而你的主机通过HEL来完成功能,这样会慢一些但仍然可以完成功能,而我的机器有部分最新功能在HAL上运行,一部分在HEL上运行(因为GMA 900硬件支持部分DirectX9).这样三台不同的机器上都实现相同的功能(虽然速度会有些不同),我们程序员不必为不同硬件而担心,游戏的代码都是一样的.

小结

到现在,我们对基本的概念有了一个比较清晰的认识,虽然我们还没有写代码,但清晰的概念非常重要,后面的学习笔记将开始DirectDraw组件的使用学习.我们现在回顾一下前两篇学习笔记中的重要概念:

1.COM---组件对象模型,是创建组件的规范

2.COM组件---按照COM规范产生的组件(比如DirectDraw,Direct3D等)

3.DirectX---以按照COM模型创建的组件的集合,包括DirectDraw,Direct3D等组件

4.接口---组件对象通过接口中方法调用实现功能,本质上是C++中的虚基类

吃饭的时间又到了,今天就到此为止了,去晚了学校食堂就没有红烧鸡翅膀了.红烧鸡翅膀我喜欢吃...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值