环境:VS2017 语言:C++
总起:
本次的博文主要参考红龙书(《Introduction to 3D Game Programming with Directx 11》)和X_Jun96大佬将DirectX SDK移植到最新的Windows SDK的博文:https://blog.csdn.net/x_jun96/article/details/80293670。
之前的Windows编程系列其实就是DirectX(以下简称Dx)编程,当时简单研究后就没有下文了,3D游戏编程大师技巧这本书也是一直忘记拿出来看,最近趁着工作稍微清闲点,打算研究一下底层的东西。
首先说一下红龙书,他的第四章节相当于《Windows游戏编程大师技巧》的所有内容还要多(除了没有实现音乐),所以刚入门的同学还是推荐《Windows游戏编程大师技巧》或跟其内容相似的最新DirectX编程,毕竟《Windows游戏编程大师技巧》实在是太老了,使用的还是Dx7。
接着说一下红龙书上的示例,虽说是Dx11,但他当时使用的是独立的DirectX SDK库,就是一个叫做June 2010的SDK库,但后来微软将Dx库合并到了Windows库中了,所以现在编写Dx程序,打开VS2017,安装Windows环境,就能直接编写Dx程序。
然后说一下为什么选择Dx11。现在已经有Dx12了,但Dx12不支持现在占有率还非常高的Win7系统,而现在公司内部基本用的都是Win7,所以考虑到兼容性和受众率还是选择了Dx11,当然学完之后想学Dx12甚至是OpenGL会很轻松,毕竟大部分思路是共同的(今天要说的这套框架,其实跟Dx7的也没啥太大区别,多了些东西而已)。
接下来进入正题,先附上工程链接:https://github.com/anguangzhihen/Dx11。
1.程序最好运行在Win32上(后来我这边的项目都在x64上跑了,没有说明的话x64都是可以运行的);
2.如果Common下的脚本没有找到,请到工程/属性中添加包含目录;
3.所有的练习都在其中,全局搜索“练习”关键字就能找到,想要运行打开注释即可。
龙书示例:https://github.com/jjuiddong/Introduction-to-3D-Game-Programming-With-DirectX11。
Window SDK示例:https://github.com/walbourn/directx-sdk-samples。
我这边会按照流程梳理一遍整体的思路,然后重点说一下关键的代码。
框架的流程和思路:
D3DApp是游戏循环的框架类,InitDirect3DApp作为它的实现对象完成了将整个屏幕显示成蓝色的任务。
让我先来看看InitDirect3DApp的代码:
// 最简单的Dx框架类实现
class In