- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 四川省第22次等级考试理论练习.doc
- 欧美流行音乐分类.doc
- 人教版必修5Unit1 Great scientists单词学案1.doc
- 3月30日08真题.doc
- 初中英语外研版七年级下册Module12 Western music单元练习.docx
- 英语构词法常见词根表.doc
- lecture高频词汇.doc
- 英语9A Unit 5重点短语句式.doc
- 基础英语3课后练习答案.doc
- 15 (不做考试要求)Musharraf Bhutto Knew Of Risks.doc
- 普通干部学习2025年中央城市工作会议精神心得体会汇编(3篇).docx
- 《无人机电机与电调技术》全套教学课件.pptx
- 画法几何及机械制图(3D版)第2版 课件 第2章 正投影基础-2.pptx
- 画法几何及机械制图(3D版)第2版 课件 第2章 正投影基础-1.pptx
- 《深度学习原理及应用》课件 第10章Transformer模型.pptx
- 《AIGC网络营销(慕课版)》-课程标准 .doc
- 《深度学习原理及应用》_殷丽凤(习题解答) .docx
- 画法几何及机械制图(3D版)第2版 课件 第1章 制图的基本知识与技能.pptx
- 《微信小程序开发》 课件 项目4--7 JavaScript基础入门、数据库操作 .pptx
- 《AIGC网络营销(慕课版)》 课件 项目四 AIGC+搜索引擎与App营销.pptx
最近下载
- 初中历史教师备课与授课.ppt VIP
- 62推销理论(教案)(商务谈判与推销).docx VIP
- 眼科学---巩膜扣带术.ppt VIP
- 2024年山东省平原县事业单位公开招聘教师岗笔试题带答案.docx VIP
- 新世纪全国高等中医药院校教材(第一版).doc VIP
- 初中语文2025届中考常考易错字词汇总(多音字+形声字+易错字形+易错成语)_可搜索.pdf VIP
- PADI开放水域潜水员理论考试A卷.docx VIP
- 社会责任全套培训记录表(含附属全套电子表格表).xls VIP
- 路科笔试真题完整版1.5.1.pdf VIP
- (人教版)八年级物理上册《第一章机械运动》单元测试卷含答案.docx VIP
文档评论(0)