关闭

关闭

封号提示

内容

首页 Direct3D中的2D编程(中文版).pdf

Direct3D中的2D编程(中文版).pdf

Direct3D中的2D编程(中文版).pdf

上传者: 绝命336 2012-01-06 评分 5 1 244 33 1107 暂无简介 简介 举报

简介:本文档为《Direct3D中的2D编程(中文版)pdf》,可适用于游戏领域,主题内容包含DirectD中的D编程美ErnestPazera著黄际洲文俊浩译重庆大学出版社ErnestPazeraFocusonDinDirectDISBN:符等。

DirectD中的D编程美ErnestPazera著黄际洲文俊浩译重庆大学出版社ErnestPazeraFocusonDinDirectDISBN:CopyrightbyPremierPress,adivisionofThomsonLearningOriginallanguagepublishedbyThomsonLearningAllRightsreserved本书原版由汤姆森学习出版集团出版。版权所有,盗印必究。ChongqingUniversityPressisauthorizedbyThomsonLearningtopublishanddistributeexclusivelythissimplifiedChineseeditionThiseditionisauthorizedforsaleinthePeople’sRepublicofChinaonly(excludingHongKong,MacaoSARandTaiwan)UnauthorizedexportofthiseditionisaviolationoftheCopyrightActNopartofthispublicationmaybereproducedordistributedbyanymeans,orstoredinadatabaseorretrievalsystem,withoutthepriorwrittenpermissionofthepublisher本书中文简体字翻译版由汤姆森学习出版集团授权重庆大学出版社独家出版发行。此版本仅限在中华人民共和国境内(不包括中国香港、澳门特别行政区及中国台湾)销售。未经授权的本书出口将被视为违反版权法的行为。未经出版者预先书面许可,不得以任何方式复制或发行本书的任何部分。版贸核渝字()第号图书在版编目(CIP)数据DirectD中的D编程(美)帕泽拉(Pazera,E)著黄际洲,文俊浩译重庆:重庆大学出版社,(Premier游戏系列丛书)ISBNⅠDⅡ帕黄文Ⅲ多媒体软件工具,DirectⅣTP中国版本图书馆CIP数据核字()第号DirectD中的D编程DirectDZhongdeDBiancheng美ErnestPazera(帕泽拉)著黄际洲文俊浩译出版者:重庆大学出版社社址:重庆市沙坪坝正街号重庆大学(A区)内网址:http:wwwcqupcomcn邮编:电话:()传真:()出版人:张鸽盛责任编辑:袁江权国政版式设计:袁江责任校对:邹忌责任印制:秦梅印刷者:重庆升光电力印务有限公司印刷发行者:全国新华书店经销开本:印张:字数:千版次:年月第版年月第次印刷书号:ISBN印数:定价:元致谢致Emi和Estelle,谢谢你们的理解和耐心的支持,谢谢你们没有因书的晚到而不喜欢我。致JohnHattan,这是你应得到的一个感谢。本书是一群人合力协作的结果,由于人太多,在此不能一一提及。但是我还是要指出那些我记得的人的名字,对于那些不小心被我遗忘的人(或者我根本就不知道却在默默奉献的人),敬请原谅。首先感谢AndréLaMothe,他赞成将D融入D书内,才使得本书得以出版。其次,感谢两位可爱的、聪明能干的、辛勤奉献的女性:EmiSmith和EstelleManticas我的编辑。另外感谢我的技术顾问LorenzoDPhillips,他是一个优秀的全能人才,给了我极大的帮助,希望我没有使他失望。还要感谢:DaveAstle、MasonMcCuskey、KevinHawkins、JohnHattan、RonPenton以及所有那些我经常通过互联网联系的人们。其他所有的人们,谢谢你们。确实是所有的人,地球上所有的同胞(活着的、已经去世的以及那些尚未出生的婴儿),这样,我就不会遗漏任何一个人了。丛书编辑寄语在年左右,我出席了微软总部的一个代号为“宣判日”的活动。这个活动主要是告诉开发者,或者应该说是奉劝开发者,DOS时代已经过去了,DirectX到来了。一些开发者对它表示怀疑许多人在使用WinG之前曾经信任过微软,如果现在询问微软有关WinG的技术,微软就会矢口否认它的存在。无论如何,微软这次是对的:DOS时代已经过去了,DirectX到来了。DirectX对游戏编程、图形以及多媒体世界产生了巨大的影响。但这个转变过程并不容易,事实上,直到DirectX出现之后,大多数游戏开发者才开始转向DirectX,摒弃了DOSG和位平面模式的DOS游戏编程。如今,市面上讲述DirectX的书非常多,上万的开发人员在为DirectX编写代码,以DirectX为基础,创建有着千万行代码规模的软件。最近,微软决定从DirectX版本中完全去除DirectDraw。听到这个消息时,我几乎快得心脏病了。确实,我们可以一直使用版本的接口和DirectDraw,那么微软为什么要这样做呢简而言之就是微软想整合大量的DirectX组件,创建一个新的、清晰的DirectXGraphics和DirectXAudio系统。这是一个伟大的构想,但是,微软本来可以继续使用DirectDraw,为什么却没有呢不要因此而哭泣。你或许会问:有什么损失呢你必须使用D接口来完成所有的D图形处理听起来相当愚蠢,不是吗好像的确是这样,但是,只要多一点耐心,使用很少的代码,就可以使用DirectD的新接口完成D图形处理,另外,还可以得到各种各样非常卓越的效果,例如缩放、旋转、透明以及光照等。基本上,可以像渲染平面多边形一样渲染D图像和精灵,对多边形进行的所有操作,对这种新的“D精灵”也都适应。为了帮助你渡过这个痛苦的过渡阶段,MrPazera编写了这本优秀的作品。本书告诉读者如何使用新的DirectX接口,来创建D精灵以及使用这些精灵创建D效果。在本书中,将会学习IDirectD,这个新接口是使用DirectD的关键,还将Ⅰ学习如何创建表面和纹理,以及如何使用DirectD硬件加速操作和变换这些对象。在讲解完必要的D基础知识后,本书将转向讲述一些D概念,帮助你在D游戏作品中加入D性能。最后,本书后面有多个游戏编程示例,说明如何创建卷轴视角(scrolling)游戏、俯视视角(topdownview)游戏、斜视角(ISOmetric)游戏等等。本书不是一本应该收藏在图书室里的书,而是一本必须收藏在图书室里的书!对于某些比较难实现的东西,读者不必再去费力尝试,因为它们已经被Pazera先生经过痛苦的尝试之后研究出来了,这本书是他辛苦劳动的结晶,以一种读者容易吸收的方式呈现在你面前,书中的知识可以立即在游戏中得以运用。诚挚的AndréLaMotheSeriesEditorⅡ介绍欢迎阅读本书。我由衷地希望你能够喜欢本书。为了此书的出版,我和许多人(许多人我都没有见过面而且我希望能够见到他们)曾进行了长时间的努力。如果你已经直接跳到了第一章,可能就会发现我直接进入了正题,而不是先用数百页的篇幅来讲述基本的Windows编程以及基本的DirectX信息。Focuson系列丛书都是采用直接讲述主题的方法。原因同读者的抱怨有关,我的上本书IsometricGameProgrammingwithDirectX,读者抱怨最多的是:(a)书的价钱太高(b)WINDirectX教程占用了全书整整三分之一的篇幅。因为WINDirectX部分占用了整整页,这本书的篇幅就膨胀到了多页。书的页码越多,印刷所需的费用也就越高,并且费用也最终会落到消费者的头上(这就是商业的本质)。基于以上原因,本书就没有包含基础部分。目前市面上有非常多的书讲述基本WINDirectX的知识(说不定你手头上就有一本),因此本书就不再进行这方面的讲述了。但是,因为本书没有讲述基础知识,要想从本书中学有所获,你应该对游戏编程知识有一定的了解(需要什么程度的了解,请参考下面“本书面向的阅读对象”部分)。本书讲述的内容本书主要讲述DirectD,它是DirectX的一个组件,主要用于渲染三维场景(或至少粗略地逼进三维)。但是,和其他的DirectD书不同,本书并没有实际讲述在传统场景中的D渲染,而是讲述D渲染,对DirectD的主题而言,D渲染是一种非常难的方法。本书将竭力讲述一些API的实际使用方法,而不是讲述如何按照这些API的原本设计意图进行使用。虽然二者的差别很细微,但却至关重要。在本书中,绝大部分内容都只起一个桥梁的作用。虽然D游戏还有生存空间(并且一直都有,不是所有的游戏都需要D),但空间却在不断缩减。那么本书提供的桥梁通往何处读完本书,就能更好地领会DirectD的内幕,当再次阅读以前让你如坠云里雾中的DirectD书时,就会感到更容易了。Ⅰ本书面向的阅读对象如果你是一个D程序员,就应该非常熟悉某些DAPI,比如GDI、DirectDraw、SDL等,重要的是,你应该很好地掌握D游戏编程所用到的各种技巧。当然,这只表明你是一个游戏程序员,比所有新手的平均水平要高出一些,但你不一定通晓全部。最理想的情况就是,你是一个D游戏程序员,没有找到买到读不懂一本或者多本DirectD方面的书,总是无法理解并掌握DirectD,所有和DirectD相关的书和或所有互联网上的教程,你都无法很好地理解,即使主题是用DirectD进行D编程,但是这些书都是从D程序员的角度进行书写的,而不是从一个D程序员的角度。本书所使用的程序设计语言是C,并且使用了某些C的特性,但本书的绝大部分要求你对C语言的知识有一个好的掌握。关于作者ErnestPazera的兴趣非常广泛,他写书(这本书是他的第三个作品)、开发游戏以及其他各类软件,为GameDevnet编写网页脚本,在他的家乡Wisconsin的Kenosha经营了一家商店空闲时,他喜欢看科幻小说,玩各种游戏(不只限于计算机游戏),最近几个月,他迷上了葡萄柚汁。Ⅱ译者序年,在听到微软决定从DirectX的版本中完全去除DirectDraw的消息时,我几乎不敢相信自己的耳朵,因为这意味着从此之后必须使用D接口来完成所有的D图形处理。在由DirectDraw向DirectD过渡时,不少D程序员深感此过程的痛苦,因为市面上所有和DirectD相关的书或互联网上的教程,都是从D程序员的角度进行书写的,而不是从一个D程序员的角度,这也给读者的理解增加了不少困难。的确,在和朋友们进行交流的时候,他们也常谈到由于该类书籍的缺乏带来许多学习上的不便。因此,寻找一本好的D编程书籍成了我用心关注的一个问题。转眼间时至年夏,当重庆大学出版社的社长助理陈晓阳询问我是否有兴趣翻译由Premier出版社出版的这本有关D游戏编程的书籍时,我意识到这本书如若能成功翻译,将无疑会成为广大D游戏程序员的福音,于我本人,也达成了自己的心愿。因此,尽管犹豫数番,我还是选择了冒失受命,兢兢业业、夜以继日地完成了译稿工作。本书是原著者数本广受读者欢迎的游戏编程书籍之一。细心的读者可能会发现,本书略去了WINDirectX部分的讲述(一来降低了书的价格,二来在于市面上专门讲述WINDirectX知识的书籍已经非常之多),开篇即直奔主题,由浅入深地从D游戏编程知识逐渐向有关D游戏编程的知识进行讲述,还不断对二者进行了穿插讲述。本书的前半部分主要讲述如何使用DirectD来实现使用DirectDraw所能实现的功能,详细解释了诸如顶点缓冲、纹理等基本概念,并切实解答了如何创建多重纹理、如何用顶点缓冲渲染图元等问题后半部分开始逐步介绍D相关的知识,从读者角度考虑,用易于理解的方式详细讲述了诸如Z缓冲、alpha混合、光照、X文件、粒子系统等较高级的主题。这两部分知识的结合为读者从D世界跨越到D世界搭设了一道桥梁,使读者在阅读完本书后,能彻悟DirectD的知识,因此也就能在阅读其他难度更高的DirectD书时,感到更轻松一些。因此,在翻译该书的过程中,我感到,对D游戏程序员来说,这是一本知识详尽且有较强实用性的游戏编程书籍,并且凭借自身的体验及了解,我也向大家推荐这本不可多得的好书。在翻译本书的过程中,我也历经了必然的喜悦与忧愁。喜的是有幸如此深入地研读域外大家之作,拓宽视野,使自己在游戏编程方面更进了一步忧的是翻译过程中,既要体味Ⅰ原作者的思想本质,又要把握他们的语言风格,还要用国人习惯的表达方式陈述出来,实非易事。由于译者水平所限,不当之处难免,敬请读者惠赐批评。请致电邮:jizhouhuangcqueducn。最后,我要深深感谢我的导师杨丹教授和文俊浩副教授,导师的宽容、鼓励和中肯的批评给了我无尽的教益和启迪,而他们为我创建的充满希望、进取精神的环境促进了这本书的早日译成。同时,我特别感谢重庆大学出版社的社长助理陈晓阳以及袁江等编辑,是他们给了我这样一个不可多得的学习机会。社长助理陈晓阳的大力支持、无私指导,令我难以忘怀而袁江以及其他参与此书编辑审核的老师们踏实负责、肯干的态度也极大鞭策了我。本书能够尽快译完付梓,是那些一直寄予我关心而我在此无法一一述及的所有师友的信念激励的结果。对他们的莫大帮助,在此诚谨致谢!黄际洲年月日于重庆大学校园Ⅱ目录第部分从DirectDraw到DirectD第章初始化DirectD初始化步骤IDirectD对象的用途创建IDirectD对象性能检测显示格式兼容格式检查总结第章创建设备创建IDirectDDevice对象设置视区DirectD颜色和清除视区显示场景重置显示模式总结第章顶点格式DirectD的用途表示顶点数据变换或者未变换Ⅰ顶点缓冲索引缓冲总结第章渲染图元渲染状态开始和结束一个场景图元类型不使用顶点缓冲来绘制图元带有用户内存指针的索引图元用顶点缓冲绘制图元用索引缓冲渲染索引图元总结第章表面资源类型后备缓冲图像表面从一个表面拷贝到另外一个表面加载图像DirectD光标创建额外的渲染目标总结第章纹理创建纹理加载纹理数据纹理坐标应用纹理到图元上纹理寻址模式多重纹理总结Ⅱ第章Alpha测试Alpha测试的概述将图像作为纹理进行加载一个图像,多个纹理总结第部分DirectD扩展第章坐标空间坐标空间的类型几何流水线总结第章矢量矢量定义DDVECTOR矢量加法矢量减法缩放矢量绝对值方向标准化旋转点乘叉乘DDX矢量函数总结第章矩阵矩阵概述矩阵加法矩阵乘法平移Ⅲ矩阵旋转缩放DDMATRIXDDXMATRIX总结第章几何流水线流水线设置变换乘以变换矩阵总结第章Z缓冲Z缓冲的定义设置Z缓冲使用Z缓冲总结第章光照DirectD光照DDMATERIALDDLIGHT点光源直射光聚光灯环境光镜面反射光放射光总结第章Alpha混合Alpha混合的定义设置Alpha混合Ⅳ使用Alpha混合总结第部分综合运用第章模型模型的定义X文件创建一个简单的X文件加载程序总结第章粒子系统粒子系统的定义粒子系统的要素粒子类型存储一个粒子系统粒子的生命周期渲染粒子一个粒子系统例子总结第章多边形中的点三角形中的点总结第章总结大型游戏在哪里你学到了什么何去何从总结索引Ⅴ第部分从DirectDraw到DirectD在DirectX面世之前,D游戏编程员的工作相当容易。从一个版本的API到下一个版本的API,DirectX的DirectDraw部分经历了相对较小的变化。这些变化不是在功能上真正有所改变,而更像是完善。至于DirectX就不再是这种情况了,虽然DirectX还在使用,但它已经显得有些过时,如果想继续编写D应用程序或者游戏的话,必须使用旧的DirectDraw或者是换用DirectD。无论如何,换用DirectD都很有必要。确实,在使你完全沉浸于DirectD所带给你的一切之前,我将逐渐让你离开DirectDraw。实际上,本书的前半部分都是在讲如何把在DirectDraw里所实现的功能转化成DirectD的等价形式。本章的主要任务是初步接触IDirectD对象。DirectD中的IDirectD对象,等同于DirectDraw中的IDirectDraw对象。本章的学习目标如下:理解DirectD的初始化步骤,以及和在DirectDraw里进行初始化的步骤的区别理解IDirectD对象的用途知道如何创建一个IDirectD对象知道如何检测一个在系统支持的适配器上的IDirectD对象的性能理解DirectD如何表示显示格式知道如何枚举出适配器的显示模式(displaymode,亦即显示方式,本文使用显示模式)对于一个特定的显示模式,知道如何查找可用的媒体格式初始化步骤在应用程序里初始化DirectDraw时,每次都需要经历几个相同的步骤(有的步骤是可选项)。初始化DirectD时,同样也是如此。初始化DirectDraw需要进行的步骤如下:枚举显示适配器(adapter)(可选)。创建一个DirectDraw对象。设置IDirectDraw对象的协作级别。检测IDirectDraw对象的性能(可选)。DirectD中的D编程第章跏蓟疍irectD枚举显示模式(如果要实现全屏)。选择和设置一个合适的显示模式(如果要实现全屏)。创建主表面和后备缓冲或双缓冲(以适合窗口或全屏)。加载游戏图像到离屏(offscreen)表面以备后用。事实上,如果使用的DirectDraw子集能够兼容所有的视频卡(我倾向于这样做),那么就没有必要检查对象的性能了。并且,如果创建窗口应用程序,就不需要枚举显示模式。具体到DirectD,也需要经历几个步骤来为需要用到DirectD的应用程序做准备,许多步骤大体上和初始化DirectDraw是一样的。创建IDirectD对象。检查IDirectD对象的性能并选择一个合适的设备类型。为适配器选择一个显示适配器和显示模式。创建并初始化IDirectDDevice对象。将游戏图像加载到纹理(texture)上。奇怪的是,IDirectD对象的初始化居然比IDirectDraw对象的初始化步骤要少。不过先别高兴,因为根据要实现的功能来创建和初始化IDirectDDevice对象可能会相当复杂,原因在于这是在运用DirectD来开发不同于预期目标的功能,本书提出了一些具有创新意义的观点。本章接下来的部分将着重讲述步骤~,使你能够对DirectD有一个较深入的认识。IDirectD对象的用途在DirectDraw里,IDirectDraw对象相当重要,因为IDirectDraw对象被当成一个“工厂(factory)”来创建其他的DirectDraw对象,包括表面(surface)、裁剪器(clipper)以及调色板(palette)。IDirectD对象和IDirectDraw对象只有些许相似,但IDirectD对象不是用作核心工厂来创建其他的DirectD对象,它只创建一个IDirectDDevice(在第章将会讲述)对象。IDirectD对象的主要用途是用来检查硬件的性能,以便能为游戏选出一个运行效果最佳的设备。由于视频卡(也称显卡)种类繁多,性能也参差不齐,游戏用到的一些特性,可能某些机器上并不支持。这些由于硬件性能而无法体现出来的特性,可以通过软件进行模拟,但是对这些特性的模拟常常会降低游戏的速度,而存在硬件加速的话,游戏就会快很多。对于可预测的将来着想,留下软件模拟还是有必要的。因此,必须重视系统需求,以免失去整整一块游戏玩家。第章初始化DirectD创建IDirectD对象从调用DirectDCreate函数开始,来初始化DirectX的DirectD子系统,DirectDCreate函数和DirectDraw中的DirectDrawCreateEx函数十分相似。下面是DirectDCreate函数的原型:IDirectD*DirectDCreate(UINTSDKVersion)DirectDCreate函数只有一个参数,通常是常量DDSDKVERSION,返回值是一个指向IDirectD对象的指针。下面的一小段代码创建并撤销(destroy)了一个IDirectD对象:IDirectD*pdd指向IDirectD对象的指针pdd=DirectDCreate(DDSDKVERSION创建IDirectD对象撤销IDirectD对象ifpdd{pdd>Release)pdd=}图创建第一个IDirectD对象图IDirectD对象向文件stdouttxt的输出和其他所有的DirectX对象一样,IDirectD也是一个COM对象,为了“撤销”IDirectD对象,就必须先释放掉他。DirectX的内部引用计数(internalreferencecounting)确保了在不需要DirectX对象的时候将其撤销(译者注:大多数对象当其引用计数降为DirectD中的D编程时,DirectX会自动从内存中释放这个对象。)。创建一个IDirectD对象要比调用DirectDrawCreateEx或CoCreateInstance简单多了。范例(在本书附赠的光盘上(X:SourceExample)有完整的代码)是一个非常简单的例子。这个例子创建了一个简单的窗口,先创建一个IDirectD对象,然后将其释放。诊断输出记录在文件stdouttxt中。图显示了应用程序,图显示了向文件stdouttxt写入的诊断记录。性能检测一旦创建了IDirectD对象,乏味琐碎的工作就开始了。为了游戏功能的稳定性,必须检查不同的设备类型,大致需要在几种显示适配器上进行检查。检查更像是枚举(枚举的过程就是创建一些东西的列表,具体地说,列举的要么是显示适配器,像视频卡,和或这些显示适配器的显示模式),但是这种枚举和老的DirectD版本所使用的枚举并不相同,并且和DirectDraw的枚举也不一样。我一开始进行枚举时遇到了一些小麻烦,因为我已经习惯使用DirectX及其更低版本所通用的枚举回调(callbackenumeration),但是,这个过程并不难。适配器首先,讲述如何决定附加哪个显示适配器给系统。由于系统附属的视频卡可能不止一个,所以要考虑这种特殊情况。在DirectDraw里,创建IDirectDraw对象之前,要使用DirectDrawEnumerate或DirectDrawEnumerateEx函数来列举出可用的显示适配器。而在DirectD里,是在创建对象之后才枚举出显示适配器。DirectD使用个函数来列举显示适配器,这三个函数是:IDirectD::GetAdapterCount,IDirectD::GetAdapterMonitor以及IDirectD::GetAdapterIdentifier。IDirectD::GetAdapterCount函数的原型如下:UINTIDirectD::GetAdapterCount)这个函数不带任何参数,返回值类型为UINT(unsignedint,即无符号整型)。函数的返回值为系统可用的显示适配器数量。如果函数的返回值为,就很好选择,因为只有一个显示适配器可供选择。适配器的编号从到GetAdapterCount)的结果减。如果GetAdapterCount函数的返回值是,仅有的适配器编号就是如果返回值是,可用的显示适配器编号就是和,其他的依此类推。默认显示适配器(defaultdisplayadapter)有一个专有值DDADAPTER第章初始化DirectDDEFAULT,其值为,并且默认适配器的编号总是。得到了显示适配器的编号之后,就可以使用IDirectD::GetAdapterIdentifier函数对它们行查看了。GetAdapterIdentifier函数提供了访问有关适配器的重要信息的入口,这些信息是人可识别(humanreadable)的。下面是GetAdapterIdentifier函数的原型:HRESULTGetAdapterIdentifierUINTAdapter,DWORDFlags,DDADAPTERIDENTIFIER*pIdentifier)与大多数DirectX函数一样,这个函数的返回类型也是HRESULT,表示函数是否成功执行。这个函数的返回值是DDOK(成功)或者DDERRINVALIDCALL,如果返回值是DDERRINVALIDCALL,就表示可能弄错了其中一个参数。Adapter参数的类型为UINT,其值为要取得信息的适配器的编号。这个编号介于到适配器数量减之间。Flags参数的值要么是,要么是常量DDENUMNOWHQLLEVEL,DDENUMNOWHQLLEVEL的含义稍后会讲到。通常情况下,这个参数的值为。最后一个参数pIdentifier是一个指向DDADAPTERIDENTIFIER结构体的指针。学习游戏制作,必然少不了有关DirectX的结构体的部分。表列出了DDADAPTERIDENTIFIER的成员以及含义。表DDADAPTERIDENTIFIER的成员成员含义Driver含有驱动程序名的字符串Description含有对适配器描述的字符串DriverVersion驱动程序的版本VendorID用来标示特殊的芯片组DeviceID用来标示特殊的芯片组SubSysID用来标示特殊的芯片组Revision用来标示特殊的芯片组DeviceIdentifier程序和适配器的全局惟一标识符(GUID)WHQLLevel认证日期DirectD中的D编程前两个成员Driver和Description都是人可识别的。举例来说,如果要为系统安放一个带有不同驱动程序的组合框,就会用到这两个成员。剩下的其他几个成员用来标示特殊的芯片组。WHQLLevel成员包含了一个位编码(bitencoded)日期,一个或者一个。WHQL是WindowHardwareQualityLab(Windows硬件质量实验室)的缩写。如果WHQLLevel的值为,则说明驱动程序适配器这一对没有通过认证如果等于,就表明通过了认证,但是没有可用的日期信息。采用别的方式,使用位到表示日,位到表示月,位到表示年。如果WHQLLevel成员的值指定为DDENUMNOWHQLLEVEL,则不管怎样,WHQLLevel成员的值都会是。这样就会很方便,因为从显示器驱动程序中获得图范例的stdouttxtWHQLLevel成员的值只需数秒时间。范例(在本书附赠的光盘上(X:SourceExample))列举了显示适配器,并将显示适配器的Driver和Description成员的信息输出到文件stdouttxt中。到目前为止,所举的例子仍然很初级,顶多就是显示一个黑色的窗口,每次你可能都恨不得立即把它关掉了事。图显示了这个程序在我的电脑上运行所产生的stdouttxt文件的内容。设备类型现在可以注意你的系统的显示适配器了(即使只有一个显示适配器),你要做好准备查看不同类型设备的驱动程序性能。针对硬件支持的千差万别,存在种能够创建的设备类型:第种设备是硬件抽象层(hardwareabstractionlevel,缩写为HAL)设备。这种设备的优点在于具有硬件加速功能,缺点是必须有适配器(译者注:通常指显卡)的支持,如果适配器不支持某种特性,那么HAL设备就不能模拟出这种特性。第种设备类型被称为参考光栅化器(referencerasterizer,也称参比设备)。这种类型的设备提供了用软件模拟的大部分DirectD的功能,他依赖于特殊的CPU指令集,但是和HAL设备相比,这种设备同软件模拟设备一样,在速度方面较慢。第种设备类型是纯软件模拟设备(puresoftwaredevice)。对于这种设备类型,本章就不进行介绍了,因为要把这种设备类型讲清楚,至少需要整整一本书。在DDDEVTYPE枚举类型中,这三种类型的设备都有各自的值,表显示了这些值,第章初始化DirectD这些数字代表了对应的设备。表DDDEVTYPE枚举类型标识符值含义DDDEVTYPEHALÂ使用HAL产生硬件加速DDDEVTYPEREFÂ参考光栅化器DDDEVTYPESWÂ软件光栅化(Softwarerasterizer)因为本书没有

类似资料

编辑推荐

空间变异理论及应用_11512669.pdf

What Evolution Is.pdf

几何学的新探索.pdf

[美]彭慕兰《大分流》.pdf

[美]柯文《在传统与现代性之间》.pdf

职业精品

精彩专题

上传我的资料

精选资料

热门资料排行换一换

  • 哲学辞典[法]伏尔泰.pdf

  • 干隆大藏经020.pdf

  • 周代金文与祖先神崇拜研究.pdf

  • 龙吟虎啸 黄埔军校百将传.pdf

  • 柏拉图《会饮篇》.pdf

  • 模煳控制·神经控制和智能控制论.…

  • 黑客攻击技术.pdf

  • (JTG D80-2006)《高…

  • 佛教文化的关键词 汉传佛教常用词…

  • 资料评价:

    / 219
    所需积分:2 立即下载

    意见
    反馈

    返回
    顶部