【Visual C++】游戏开发笔记二十八 最精简的Direct3D11 Demo筋骨脉络全攻略.docVIP

【Visual C++】游戏开发笔记二十八 最精简的Direct3D11 Demo筋骨脉络全攻略.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【VisualC】游戏开发笔记二十八最精简的Direct3D11Demo筋骨脉络全攻略

【Visual C++】游戏开发笔记二十八 最精简的Direct3D11 Demo筋骨脉络全攻略 本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 /zhmxy555/article/details/7707628 作者:毛星云??? 邮箱: happylifemxy@ ? ? ? 本篇文章将讲解如何通过我们在之前的文章里面已掌握的DirectX 11的知识,来一步一步创建一个基于Direct3D11的Blank Windows Demo,而我们在这节里面完成的这个demo,将在后面的文章里面作为一个模板,用于演示之后的各种新奇DirectX11的功能。 ? 首先呢,为了代码的重用性着想,我们会写一个 DirectX11DemoBase,并借鉴在笔记二十六中的Win32风格的Blank Win32 Window Demo中的代码,然后通过派生的方式,以及重载一些必要的虚函数,进行整合,来创建我们的demo。 ?????? 一、? 关于代码书写风格的讨论 ? 首先,我们提出一个问题,采用自问自答的形式来讨论: 在这个demo的设计过程中,我们是采用C语言式的全局变量与全局函数的搭档模式来完成,还是采用C++式的面向对象风格的类Class来编写呢? ? 答案是后者,采用面向对象的思想来完成。至于这个问题的解释,答案就仁者见仁智者见智了。 浅墨之前看过一本C++界的名著《C++沉思录》,作者在文章的开篇举了一个例子,然后通过例子对比出来的效果,折射出了对C与C++的一个中肯的评价,是这样的一段话: “C++鼓励采用类来表示类似于输出流的事物,而类就提供了一个理想的位置来存放状态信息。而C语言倾向于不存储状态信息,除非事先已经规划妥当。因此C程序员趋向于假设有这样一个“环境”:存在一个位置集合,他们可以在其中找到系统的当前状态。如果只有一个环境和一个系统,这样考虑毫无问题,但是,系统在不断增长的过程中往往需要引入某些独一无二的东西,并且创建更多这类东西。” 对这段话的解释,浅墨还是用自己的话来叙述吧: 通常我们采用一般的变量作为传递数据的容器,但是随着程序的复杂会导致数据量的加大,有太多的数据需要被传递,而且这些数据基本上都是需要传递到近乎是每一个函数当中的,这样我们就要创建很多的全局变量作为“容器”,如此下去我们的设计的程序只会越来越臃肿,越来越乱。别怕别怕,有绝招呢——我们可以创建一个类或者结构体来收容这些对象,使之显得不是那么乱,取而代之的是井井有条。 绕了这么大一圈子,一言以蔽之,就是运用全局变量是不太好的编程习惯,我们应当少用甚至不用,转而使用“类”来完成这些任务。 ? ? ? 二、??? Dx11DemoBase类的设计 ? 作为目前来说,我们要求本节的demo做到以下几点功能: ? ▲初始化D3D ▲释放在启动过程中创建的Direct3D对象 ▲为我们的D3D对象存储成员变量 ▲提供一个装载demo的具体内容的方式 ▲提供一个卸载demo的具体内容的方式 ▲能够显示demo每帧的更新的具体内容 ▲demo渲染内容的具体代码 ? 由我们上面的清单来看,创建一个公共的初始化和卸载函数,用于装载和卸载内容功能的虚函数,以及渲染和更新游戏循环步骤的虚函数的基类是很有必要的。通过将这些函数设为虚函数,由基类派生出来的demo类能够实现他们自定义的逻辑和行为。 根据上面的这些叙述,我们可以写出下面的这段为Dx11DemoBase量身打造的代码: ? ? 代码段一 ?Dx11DemoBases类的头文件 ? [cpp]?view plaincopyprint? #ifndef?_DEMO_BASE_H_?? #define?_DEMO_BASE_H_?? #included3d11.h?? #included3dx11.h?? #includeDxErr.h?? class?Dx11DemoBase?? {?? public:?? ???Dx11DemoBase();?? ???virtual?~Dx11DemoBase();?? ???bool?Initialize(?HINSTANCE?hInstance,?HWND?hwnd?);?? ???void?Shutdown(?);?? ???virtual?bool?LoadContent(?);?? ???virtual?void?UnloadContent(?);?? ???virtual?void?Update(?float?dt?)?=?0;?? ???virtual?void?Render(?)?=?0;?? ???protected:?? ???HINSTANCE?hInstance_;?? ???HWND?hwnd_;?? ???D3D_DRIVER_TYP

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档