我正在跟随DirectXTutorial,我遇到了一个我无法解决的问题。过去有些问题没有用,比如D3DX11CompileFromFile(),所以我不得不使用D3DCompileFromFile并包含d3dcompiler.h。
现在我正在进行3D转换,我必须为所涉及的矩阵包含D3DX10Math.h。为此,我不得不再次编辑我的include和lib目录以包含DirectX SDK(2010年6月)。
一旦我这样做,D3DCompileFromFile()就变得未定义。我已经尝试更改目录的顺序并更改标题中包含的顺序,但我做的任何事情似乎都无效。他们只是不想一起工作。 这是我的包括:
#include <windows.h>
#include <windowsx.h>
#include <d3d11.h>
#include <d3dcompiler.h>
#include <DirectXPackedVector.h>
#include <D3DX10math.h>
与lib一起包括:
#pragma comment (lib, "d3dcompiler.lib")
#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")
另外,目录的图片: Directories
我做错了什么想法?或者是否存在某些我不知道的不兼容性?
答案 0 :(得分:1)
基本问题是旧版DirectX SDK已被弃用,其中的标头旧比VS 2012或更高版本附带的标头。见MSDN
理想的解决方案是根本不使用传统的DirectX SDK内容。您不会将D3DX10用于数学,而是使用DirectXMath。你不会使用D3DX11进行纹理加载,而是使用DirectX Tool Kit之类的其他解决方案。有关替换的完整列表,请参阅Living without D3DX。
可能您正在使用较旧的教程,希望您使用现在已弃用的东西,如D3DX11。你仍然可以这样做,但你需要特别小心。特别是,您需要在标准包含路径之后添加DirectX SDK include / lib路径。这通常在Visual C ++中通过编辑项目设置中的VC ++目录页面并确保在 end 而不是开头添加include / lib路径来完成 - - 这也意味着避免使用其他目录选项,这些选项将在其他标题/库之前。
有关详细信息,请参阅此MSDN和The Zombie DirectX SDK的底部。