在Windows 10下配置 DirectX11 + Visual Studio 2017开发环境

前言

开发环境无需配置,但如果还是有闲情雅致的话可以接着看看。

最近想要学习一下DirectX,但在最一开始进行环境配置的时候就折腾了两三天,幸好在国内外(连日本的我都去看了(哭))各种博客以及问答论坛的帮助下,最终还是配置成功了。怀着一股感恩的心情,来将这几天遇到的坑与大家分享一下。

文章基本上是参考这篇博客写的,但做了一些补充,十分感谢博主。

(文章是在刚入门DirectX时写的,想要走一些弯路的话,可以接着往下看;但想要快捷步入DirectX学习的话,推荐去看DirectX11-With-Windows-SDK,里面有配置好的项目,下载下来就可以运行)

坑的简要说明

1.需要重新安装DirectX 11。Win10本身是自带DirectX 12的,关于这一点可以通过如下操作确认:按下Win + R,输入Dxdiag,然后将会运行DirectX诊断工具。但由于未来工作需要使用DirectX 11,虽然Win8自带DirectX 11,但如果不想重装系统的话,就只能继续折腾了。

2.升级到Visual Studio 2017。Introduction to 3D Game Programming with DirectX 11是一本不错的入门DirectX的书,但书中的操作步骤以及示例代码都是基于Visual Studio 2010的,又是由于未来工作需要使用Visual Studio 2017,没办法,接着折腾。由于需要升级到VS 2017,导致了一系列静态库不兼容的问题需要解决。

配置详细过程

准备工作

首先默认你的电脑为Window 10系统,且安装了Visual Studio 2017。

1.下载安装DirectX 11

下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=6812

下载好后,直接按照提示安装即可。但在这之前,如果你的电脑中安装了Microsoft Visual C++ 2010 Redistributable,需要先到控制面板中将其卸载,否则将会出现错误(具体解决方案可以参考这篇博客)。如果你不小心直接安装了且遇到了问题,没关系,卸载好之后再重新安装一遍就好了。

2.下载Introduction to 3D Game Programming with DirectX 11书中的示例代码

下载地址在这篇博客中

示例代码中包含各章的示例程序和一个Common文件夹

3.下载dxerr.lib的替代品

估计很多人在编译示例代码时候可能会遇到HR宏相关的问题,这是因为链接的dxerr.lib与VS2017不兼容的缘故,为此我们需要下载dxerr的源码,下载地址见这篇博客中底部的链接。

下载好后,将其中的dxerr.h和dxerr.cpp放入上一步提到的Common文件夹中。

4.下载并编译生成Effect的静态库

目前我也不知道Effect库的作用,如果有过编译网上一些开源库的经历的话,我们应该知道对于不同的VS版本,不同的平台(x86和x64),不同的编译模式(debug和release模式),所需的静态库也是不一样的。因此我们需要自己编译Effect库来替换Common文件夹中提供的VS 2010版本的静态库。

这个过程并不复杂:首先下载Effect库的源码,解压后可以看到里面有各种平台各种VS版本的解决方案,我们选择Effects11_2017_Win10.sln并用Visual Studio 2017打开,然后F7直接生成(注意这里的编译模式要和你后面运行的示例的编译模式一致,本文这里就选择了Debug Win32(x86)模式)

生成成功后,找到刚刚下载的文件夹中的Bin目录,从里面找到Effects11d.lib并复制到Common文件夹中。

5.类似于第三步,我们还需要一个用来加载纹理的库DDSTextureLoader,下载好后,将其中的DDSTextureLoader.h/cpp放置到Common文件夹下。

运行示例代码

准备工作基本完成,下面以书中示例代码第九章的BlendDemo为例,我们来检查一下我们是否配置成功。

1.打开VS 2017,用Windows桌面向导新建一个空的Windows应用程序。

2.设置项目属性:将Common的路径设置为加入到包含目录,将Effects11d.lib的目录设置为库目录,注意这里不要按照书中的步骤,将DirectX11 SDK目录中的include和lib路径加入进去

在附加依赖项中加入如下静态库的名称:d3dcompiler.lib,Effects11d.lib,d3d11.lib,dxgi.lib,dxguid.lib

3.添加示例代码:找到下载的示例代码第九章的BlendDemo,将下列.h和.cpp文件复制到当前项目的工作目录中,然后将FX和Textures两个文件夹也复制过来。

在VS2017的解决方案资源管理器视图中将上述.h和.cpp文件通过添加现有项添加到项目中来,然后新建一个Common筛选器,将我们前面准备的Common文件夹中的.h和.cpp文件添加进来,并排除xnacollision.cpp和xnacollision.h。接着再新建一个FX筛选器,将FX文件夹中的文件添加进来,最后的目录看起来应该是这样:

4.我们接下来先生成一下项目,会发现会有好多错误,没关系参考了大佬的博客,我们来做一些处理:

(1)移除代码中的#include <d3dx11.h>

(2)添加#include "DDSTextureLoader.h"到 d3dUtil.h

(3)替换#include <xnamath.h>为#include <DirectXMath.h>和#include <DirectXPackedVector.h>

(4)将关键字D3DX11INLINE替换为C++关键字inline

(5)遇到一些未定义的标识符,比如XMVector,XMMatrixTranspose时,在文件顶部添加命名空间:

         using namespace DirectX;

         using namespace DirectX::PackedVector;

(6)如遇到找不到entrypoint的问题,则可以右击FX中的两个文件,设置属性,将项类型改为不参与生成。这里还需要解决一个问题,就是编译Basic.fx,生成Basic.fxo,我目前还不会,只好先复制了别人编译好的文件到FX中。(2019.01.07更新,经过大佬指点,知道了Basic.fxo的生成方法:在我们下载的DirectX SDK的安装目录下面,有一个fxc.exe可执行文件,我们用win + R打开命令行并进入fxc.exe所在的目录,方便起见,我们先把Basic.fx和LightHelper.fx两个文件复制到fxc.exe所在的目录下,然后在命令行中运行如下命令fxc /Fc /Od /Zi /T fx_5_0 Basic.fx /Fo Basic.fxo,然后检查一下会发现当前目录下生成了我们需要的Basic.fxo和Basic.cod)

(7)(2019.01.07更新)在项目属性中将字符集改为Unicode

不出意外的话,运行一下应该就可以看到如下画面了。

一些可能有些帮助的资料

DirectX资源下载

Direct3D 11 Book Demos with Windows 10 and Visual Studio 2015

 

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值