通过Visual Studio 2015安装演示项目[3]
通过双击项目文件(.vcxproj)或解决方案文件(.sln)就可以方便地打开本书的演示程序。接下来,我们将详述如何通过Visual Studio 2015 (VS15)以本书的例程框架从头开始创建并构建一个项目。在此,我们以第6章中的“Box”(立方体)演示程序为例。
下载本书的源代码
首先,读者需要下载本书所用的源代码并将其保存在硬盘的某个文件夹之中。为了便于讨论,假设这个文件夹的路径为C:\d3d12book。在这里可以看到一系列文件夹,其中含有对应章节的例程项目。读者可能会注意到有个名为“Common”的文件夹,其中包含所有演示项目中都要复用的公共代码。现在便可以在源代码文件夹中新建一个文件夹,用来存放我们自己的例程,例如C:\d3d12book\MyDemos。随后,我们将基于本书中的例程框架在该文件夹中创建一个新的项目。
注意
事实上,读者自己设置的目录结构大可不必如此,这只不过是本书例程的结构而已。如果读者希望按自己的意愿来设置源代码文件,可以将演示项目放在任何地方,只要使Visual Studio能找到Common目录中的源代码即可。
创建一个Win32项目
首先运行VS15,接着在主菜单中依次选择File(文件)→New(新建)→Project(项目),如图3所示。
图3 创建一个新项目
在弹出的New Project(新项目)对话框(如图4所示)左侧Visual C++项目类型的树形控件中选择Visual C++→Win32,再于右侧选择Win32 Project(Win32项目)。接下来,给项目起个名称,并指定项目文件夹的保存位置。别忘了取消默认选中的Create directory for solution(为解决方案创建目录)复选框。随后单击OK(确定)按钮。
接着,又会弹出一个新的对话框。其左侧有Overview(概述)和Application Settings(应用程序设置)两个选项。选择Application Settings,便会出现如图5所示的对话框。在这里,需要确保选择Windows application(Windows应用程序)选项和Empty project(空项目)复选框,之后再单击Finish(完成)按钮。至此,我们已成功创建了一个空的Win32项目,但在构建DirectX项目例程之前,我们还有一些事情需要做。
图4 新项目的相关设置
图5 应用程序的相关设置
链接DirectX库
通过在源代码文件Common/d3dApp.h中使用#pragma预处理指令来链接所需的库文件,如:
// 链接所需的d3d12库 #pragma comment(lib, "d3dcompiler.lib") #pragma comment(lib, "D3D12.lib") #pragma comment(lib, "dxgi.lib")
对于创建演示程序而言,该预处理指令使我们免于打开项目属性页面并在连接器配置项下指定附加依赖库。
添加源代码并构建项目
至此,项目已经配置完成。现在来为它添加源代码并对其进行构建。首先,将“Box”演示程序的源代码BoxApp.cpp以及Shaders文件夹(位于d3d12book\Chapter 6 Drawing in Direct3D\Box)复制到工程目录之中。
待复制完上述文件之后,我们以下列步骤来将源代码添加到当前的项目之中。
1.右键单击解决方案资源管理器下的项目名称,在弹出的下拉菜单中依次选择Add(添加)→Existing Item(现有项),将文件BoxApp.cpp添加到项目中。
2.右键单击解决方案资源管理器下的项目名称,在弹出的下拉菜单中逐步选择Add→Existing Item,前往读者放置本书Common文件夹的位置,并将此文件夹中所有的.h/.cpp文件都添加到项目之中。现在,方案资源管理器看起来应当与图6相同。
3.再次右键单击解决方案资源管理器下的项目名称,从菜单中选择Properties(属性)。再从Configuration Properties(配置属性)→General(常规)选项卡下,将Target Platform Version(目标平台版本)设置为版本10.x[4],以令目标平台为Windows 10。接着单击Apply(应用)按钮。
4.大功告成!源代码文件现都已位于项目之中,读者可以在主菜单中选择Debug(调试)→Start Debugging(开始调试)进行编译、链接以及执行该演示程序。应用程序的执行效果应当与图7所示的一致。
图6 添加“Box”例程所需源代码之后的解决方案资源管理器
图7 “Box”演示程序的效果
注意
Common目录下的大量代码都是构建本书例程的基石。所以,建议读者先不必忙于查看这些代码。待读到了本书中与之相关的章节后,再研究它们也不迟。
[1] 尤其是到了Direct3D 12,更像Mantle等API那样实现了前所未有的更底层的硬件抽象,削减驱动层的工作,转交给开发者负责,从而令图形的处理流程更加“智能”,使用起来犹如贴地飞行的“快感”。
[2] DirectX包罗系列与多媒体以及游戏开发有关的API,因此Direct3D只是DirectX的一个子集。详细信息请见《DirectX Graphics and Graming》(ee663274)。本书则侧重Direct3D的讲解。
[3] 采用Visual Studio 2017的读者可以参考《Visual Studio中的使用C++的DirectX游戏开发》一文。
[4] 其中的“x”对应于构建项目时所采用的具体SDK版本。