这篇文章是CSDN文章“龙书D3D11 Demo配置(VS2015+win10)”的一个实践(另一篇文章“如何使用VS2015编译运行DX11版本龙书配套源码”也讲了同样的内容)。写下来的目的一是巩固所学知识,二是防止原博客丢失造成的损失。两篇原文的链接如下:

https://blog.csdn.net/tjj00686/article/details/49110501

https://blog.csdn.net/Pobber/article/details/51971939

首先,我已经有Introduction_to_3D_Game_Programming_with_Directx_11教材的随书源码,这些源码例子已经在VS2010上成功编译运行。由于VS2010已经比较过时,为了配合后续程序编写,我希望能够写一个VS2015版本的DirectX11程序。尽管VS2015已经能够直接使用DirectX11进行编程,但由于我是通过指导教材来学习的,暂时还没有时间去尝试新版(VS2015)的DirectX11;所以我希望把之前在旧版(VS2010编写)所做的工作迁移到VS2015上。以后有时间再去研究新版DirectX11的使用。

接下来是具体的迁移步骤:

1、下载Effects framework,原文给出的链接如下:

https://github.com/Microsoft/FX11

“下载源代码,打开Effects11_2015.sln解决方案,并且使用VS2015重新生成lib库文件的Debug版本和Release版本。将Debug版本的lib库文件重命名为Effects11d.lib,Release版本的lib库文件重命名为Effects11.lib。并复制d3dx11effect.h和Effects11d.lib和Effects11.lib到本书代码附带的Common文件夹里(覆写旧的文件)。”这是原文的描述,但我希望我的DirectX11程序在最终发布的时候是静态编译的,所以我需要生成静态库。因此在生成库文件的时候要做两点改变,如下图所示:

这样修改之后编译运行生成的就是win32、debug版本的静态库,如果要生成x64或者release版本的库,只要修改属性页的相应位置并保证“MFC的使用”和“运行库”匹配就行了。此外,我希望生成多个版本的库文件,以便调试和发布的时候可以方便的切换版本,所以我没有将库文件放入Common文件夹中,而是单独创建了一个库文件夹。我在这里首先是创建了一个DirectX11的文件夹,专门用来放置DirectX11项目需要引用的文件。然后把库文件夹放在了这个文件夹下。如下所示:

2、下载供VS2015使用的Common文件夹。原文链接如下:

https://github.com/DrinkMoon/directx11-pratices/tree/master/Common_vs2015

我把这个Common_VS2015文件夹放在DirectX11文件夹下,和库文件夹并列。如下所示:

在下载的FX-master项目中找到d3dx11effect.h,并放入到Common_VS2015文件夹下,替换旧的文件(查看d3dx11effect.h的源代码,发现它是有版本号的,如果不进行替换,编译所使用的d3dx11effect.h与引用的d3dx11effect.h版本号就很可能会不一致,进而出现问题。由于没有这样测试过,所以不清楚具体会出什么问题,有待考证)。d3dx11effect.h的位置如下:

3、下载DDSTextureLoader。原文给出的下载链接如下:

https://github.com/Microsoft/DirectXTex

我使用了纹理,理论上需要下载这个,并将DDSTextureLoader.h/cpp放到Common_VS2015文件夹下。但是由于我用的是别人用过的Common_VS2015,实际上他已经做了替换,所以我没有进行替换,只是重新加载了Common_VS2015中的文件。因为这个链接上的代码一直在更新,所以是否需要下载并替换要自己做决定。

4、下载dxerr.lib的替代品。原文给出了一个博客链接,在这篇文章的最后有一个链接可以下载dxerr_nov2015.zip,解压之后放到Common_VS2015文件夹中。原文博客链接如下:

https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres-dxerr-lib/

5、关于Mesh。原文提到了Mesh相关函数集的下载,但是没有说具体用法。我没有下载。在其他配置完成之后发现不需要下载这个,Demo也能正常运行。它的作用可能是曲面细分之类的,我没有用到,具体功能有待进一步研究。

现在按照原文中的步骤来修改Demo。步骤如下:

1、将随书源码中的例子BlendDemo复制到VS2015常放置项目的文件夹下(修改复制的文件是良好的习惯,建议这样做)。然后用VS2015打开它,提示要升级,点击确定。这个时候Common文件夹中的文件无法打开,需要重新加载,把Common_VS2015中需要使用到的文件加载进来。这里我把它们全部加载了进来。

2、修改项目属性。

(1)、“VC++目录”->“包含目录”->“D:\Tools\DirectX11\Common_VS2015”。包含目录填写自己的Common_VS2015文件夹所在目录。

(2)、“VC++目录”->“库目录”->“D:\Tools\DirectX11\Effects11\Win32_Debug_Static_MTd”。库目录填写自己要使用的Effects11库的目录。

(3)、“配置属性”->“常规”->“MFC的使用”->“在静态库中使用MFC”。

(4)、“配置属性”->“C/C++目录”->“代码生成”->“运行库”->“多线程调试 (/MTd)”。

(5)、“配置属性”->“链接器”->“输入”->“附加依赖项”。填写以下值:

d3d11.lib

Effects11d.lib

d3dcompiler.lib

dxguid.lib

下面这些是系统默认库,如果已经继承了就不用填写,如果没有继承就需要手动填写。我这里刚打开的时候是默认继承的,但是删掉dxerr.lib库之后就不会继承了,所以进行了手动添加。

winmm.lib

comctl32.lib

usp10.lib

kernel32.lib

user32.lib

gdi32.lib

winspool.lib

comdlg32.lib

advapi32.lib

shell32.lib

ole32.lib

oleaut32.lib

uuid.lib

odbc32.lib

odbccp32.lib

(6)、“配置属性”->“常规”->“字符集”->“使用多字节字符集”。

3、移除代码中的#include <d3dx11.h>, 以及链接的d3dx11.lib, 还有其他一切依赖于d3dx11的代码(这个地方需要注意,并不是说只要包含d3dx11这样字符的就要删除,需要仔细辨别)。

4、移除链接的dxerr.lib, 添加dxerr.h/cpp到Demo中,修改#include <dxerr.h>为#include “dxerr.h”。

5、添加#include "DDSTextureLoader.h"到 d3dUtil.h。

6、替换#include <xnamath.h>#为include <DirectXMath.h>和#include <DirectXPackedVector.h>。

7、在使用类似XMVector,XMMatrixTranspose时, 改为DirectX::XMVector, DirectX::XMMatrixTranspose。为了避免这么麻烦,可以在引用DirectXMath.h的地方添加using namespace DirectX,在引用DirectXPackedVector.h的地方添加using namespace DirectX::PackedVector,这样就不用到处添加名字空间前缀了。

8、移除所有使用D3DX11INLINE的地方,或者替换为C++关键字inline。

9、取消使用d3dHelper::CreateTexture2DArraySRV,推荐使用texassemble工具(https://directxtex.codeplex.com/wikipage?title=Texassemble&referringTitle=Texconv)离线创建纹理数组。

10、在d3dUtil.h中,替换DXTrace调用时用到的参数__FILE__为__FILEW__, 因为现在获取文件名以宽字符串的方式。

11、在d3dUtil.cpp中,修改ExtractFrustumPlanes函数:

void ExtractFrustumPlanes(XMFLOAT4 planes[6], CXMMATRIX T){XMFLOAT4X4 M;XMStoreFloat4x4(&M, T);//// Left//planes[0].x = M(0,3) + M(0,0);planes[0].y = M(1,3) + M(1,0);planes[0].z = M(2,3) + M(2,0);planes[0].w = M(3,3) + M(3,0);//// Right//planes[1].x = M(0,3) - M(0,0);planes[1].y = M(1,3) - M(1,0);planes[1].z = M(2,3) - M(2,0);planes[1].w = M(3,3) - M(3,0);//// Bottom//planes[2].x = M(0,3) + M(0,1);planes[2].y = M(1,3) + M(1,1);planes[2].z = M(2,3) + M(2,1);planes[2].w = M(3,3) + M(3,1);//// Top//planes[3].x = M(0,3) - M(0,1);planes[3].y = M(1,3) - M(1,1);planes[3].z = M(2,3) - M(2,1);planes[3].w = M(3,3) - M(3,1);//// Near//planes[4].x = M(0,2);planes[4].y = M(1,2);planes[4].z = M(2,2);planes[4].w = M(3,2);//// Far//planes[5].x = M(0,3) - M(0,2);planes[5].y = M(1,3) - M(1,2);planes[5].z = M(2,3) - M(2,2);planes[5].w = M(3,3) - M(3,2);// Normalize the plane equations.for(int i = 0; i < 6; ++i){XMVECTOR v = XMPlaneNormalize(XMLoadFloat4(&planes[i]));XMStoreFloat4(&planes[i], v);}}

12、替换D3DX11CreateShaderResourceViewFormFile为DirectX::CreateDDSTextureFromFile, 在BlendDemo中:

    ID3D11Resource* texResource = nullptr;HR(DirectX::CreateDDSTextureFromFile(md3dDevice,L"Textures/grass.dds", &texResource, &mGrassMapSRV));ReleaseCOM(texResource); // view saves referenceHR(DirectX::CreateDDSTextureFromFile(md3dDevice,L"Textures/water2.dds", &texResource, &mWavesMapSRV));ReleaseCOM(texResource); // view saves referenceHR(DirectX::CreateDDSTextureFromFile(md3dDevice,L"Textures/WireFence.dds", &texResource, &mBoxMapSRV));ReleaseCOM(texResource); // view saves reference

经过这些修改之后,就可以编译运行了(可能需要添加图形工具,如果原来没有添加的话)。以下链接是我修改好的BlendDemo以及相关的资料。

https://download.csdn.net/download/liang9jian/10866377

DirectX11程序从VS2010转到VS2015的配置与使用相关推荐

  1. VS2015上配置opencv2.4.11

    VS2015上配置opencv2.4.11版方法总结 最近给电脑重装了系统,需要的软件各种装.今天阅读了很多网上的博客,几经波折完成了opencv的配置.配置opencv与其他函数包或者软件相比算是麻 ...

  2. QT:(3)在VS2015下配置qt

    接上一篇我们已经在Win10下安装了QT5.12.8.因为使用VS2015习惯了所以想在VS2015上配置一下qt.方法如下: 1.在开始菜单下选择VS2015打开.(可以是VS的其他版本,本人使用的 ...

  3. .NET平台下WEB应用程序的部署(安装数据库和自动配置)

    .NET平台下WEB应用程序的部署(安装数据库和自动配置)   李洪根 在.NET平台下,部署 Web 解决方案是比较方便的.我们可以利用Visual Studio.NET 2003添加一个WEB安装 ...

  4. VS2015+OpenGL配置方法

    VS2015+OpenGL配置方法 参考VS2015安装+OpenGL环境配置及测试 有几点需要注意: 没必要将VS全部功能进行安装 执行OpenGL环境配置的第(4)步之前必须将平台改为x64 Op ...

  5. .NET平台下WEB应用程序的部署(安装数据库和自动配置,启动条件)

    转自:http://blog.csdn.net/lihonggen0/article/details/13654 首先,创建一个安装和部署项目.步骤如下: 1.在 "解决方案资源管理器 &q ...

  6. PCL 1.8.1 在VS2015中配置 包含目录、库目录和附加依赖项

    PCL 1.8.1 在VS2015中配置 包含目录.库目录和附加依赖项 1. 包含目录 2. 库目录 3. 附加依赖项 如果想要永久配置,需要在属性管理器中进行. 1. 包含目录 C:\Program ...

  7. PTK(Pulmonarytoolkit)环境搭建与 ITK4.13+VS2015的配置

    Github来源: https://github.com/tomdoel/pulmonarytoolkit 环境准备: *matlab>=R2011a *C++编译器(VS2015) *Matl ...

  8. 无法定位程序输入点(cmake opencv_contrib,并配置后)

    无法定位程序输入点(cmake opencv_contrib,并配置后) 检查后发现是系统环境变量没有把之前opencv的给删除掉,删除掉原来的系统变量就好了

  9. VS2015安装配置SQLite3数据库

    SQLite官方下载页只提供SQLite3.def和SQlite3.dll文件的下载,若使用VC++编程的话,还需要SQLite3.lib库文件,才能调用编译成功.我们可以使用 Visual C++ ...

  10. VS2010 Intel OpenCL安装与配置

    VS2010 Intel OpenCL安装与配置 步骤: 1.        了解系统配置,选择合适的安装包 2.        安装 "intel_sdk_for_opencl_setup ...

最新文章

  1. 学习:正则表达式的基本语法
  2. Swift 反射Mirror的使用
  3. Java ---- 序列化
  4. linux下的socket通信小程序分享——第三圣子
  5. 谷歌浏览器怎样通过检查验证图片路径问题
  6. 将字符串的部分保存,剩余删去,或只保留指定一段子字符串
  7. ssh作业批改系统_如何看待「全国至少十省份叫停家长批改作业」?能否从根源解决问题?...
  8. 这几年人工智能和大数据的真实就业规律
  9. Java基础知识复习(二)
  10. 译 | Azure 应用服务中的程序崩溃监控
  11. Java 8 Friday:Java 8将彻底改变数据库访问
  12. 安装python缺少dll_python报错DLL load failed:找不到模块怎么解决?
  13. Hadoop1.x中HDFS工作原理
  14. QThread Class
  15. 内存模拟块设备驱动程序设计
  16. 编程基本功:即使是脚本,也尽量减少硬代码,都使用变量
  17. Code::Blocks代码自动提示设置及常用快捷键 .
  18. 获取北京时间 日开始时间戳
  19. html设计简历表,HTML table制作个人简历
  20. 1 Arduino开发软件和下载程序

热门文章

  1. linux 回收站目录,探索linux系统回收站与U盘中的.Trash文件夹区别之处
  2. python3中26个英文字母排序_26个英文字母的排序是怎样排的?
  3. java公众号第三方开发平台_微信开放平台之公众号第三方平台开发及全网发布验证...
  4. mysql挂马_虚拟主机/数据库中挂马清理方法
  5. 机器学习_深度学习毕设题目汇总——图像分类
  6. DC-1详解(绝对的详细!)
  7. warning: #61-D: integer operation result is out of range
  8. 离散-关系矩阵乘法运算
  9. Excel 纵向查找函数 vlookup() 使用入门
  10. 中国万网CEO张向东解读被阿里收购幕后