我只是想学习DirectX 11(不,我对OpenGL和Vulcan都不感兴趣),并且我正在使用最新的Windows 10内部版本。我知道有DirectX 12,但据我所知,非(A)AA的麻烦多于其值(value)。我完全知道,要启动和运行游戏,使用像虚幻引擎这样的现有游戏引擎会更合适。但是我对获得一款可行的游戏并不真正感兴趣。我只希望某些东西不贬值,并且可以代替GDI(+)。而且我一直都想学习DirectX。我正在使用C++,这可能是主要的编程语言。作为我的IDE,我正在使用Visual Studio 2017 Enterprise。我还要补充一点,我对Windows API(以前称为Win32 API)很熟悉。

我可以访问Allen Sherrod和Wendy Jones的《 Beginning DirectX 11 Game Programming》一书,以及Frank D. Luna的《 DirectX 11 3D游戏编程简介》。但是两者都存在一个主要问题:他们使用已贬值的DirectX 6月11日SDK,该SDK不兼容Windows 8和10 SDK一起使用。虽然很容易用WinAPI代码替换错误管理代码,但我仍然坚持:

bool compileResult = CompileD3DShader( "SolidGreenColor.fx", "VS_Main", "vs_4_0", &vsBuffer );
CompileD3DShader似乎不存在。我对谷歌搜索不太满意。但是从我发现的结果来看,我得出的结论是,他们不仅重命名了它,还用其他某种机制代替了它。虽然我不确定。谁能以Windows 8/10兼容的方式帮助我写那行?

还有一个问题,如果我对使用旧的DirectX SDK不感兴趣,这些书有什么用吗?我正在考虑寻找好的在线教程。如果还没有足够好的产品,那么我将不得不改用Luna的DirectX 12书籍,而通常改用DirectX 12。不幸的是,似乎没有DirectX 12替代Beginning DirectX 11游戏编程(分别有针对DirectX 9和10的书),我更喜欢(我更喜欢先学习API的基础知识,这样我才能然后专注于数学)。

有谁知道学习“现代” DirectX 11的良好而全面的资源?我对书籍和在线内容(包括YouTube视频)都开放。

更新1:
鉴于似乎不允许就替代性倾斜 Material 寻求建议(我忘记了这一点,对此感到抱歉),我想强调我问题中最重要的部分。

为旧的Direct X SDK编写的书籍/在线教程是否仍然适用于Windows 8 / 8.1 / 10 SDK?我知道我必须使用不同的 header ,并且某些内容已重命名,并且DirectX错误处理库已删除。除了DirectX错误处理库之外,我是否可以重命名某些函数,并且代码可以工作,或者区别更大?

更新2:
我发现了两个似乎更新了的资料。虽然我必须仔细看看他们,但我想将他们的链接发布给与我有相同问题并且无法在Google上找到正确答案的任何人:
http://www.directxtutorial.com/Lesson.aspx?lessonid=111-4-1

https://msdn.microsoft.com/en-us/library/ee416804(v=VS.85).aspx

如果这些教程是最新的,我也许能够弄清楚这两本书是否仍然有用。

最佳答案

Direct3D 11上的所有各种书籍仍然适用于涵盖核心API,如何使用DirectX 11的概念和功能的问题。由于使用了现在的传统DirectX SDK而出现了问题。尤其是D3DX,D3DXMath或XNAMath,以及对旧版Effects系统的使用。也就是说,您仍然最终学习如何进行Direct3D图形编程。我有一篇博客文章,其中详细介绍了各种书籍,并提供了一些注意事项。参见Book Recommendations。自我提醒:我应该看一看Sherrod&Jones的书,并更新文章。



有关使用Windows 8.1 SDK或Windows 10 SDK时如何替换所有旧DirectX SDK东西的完整指南,请访问Living Without D3DX。您会注意到着色器编译API,它链接到HLSL, FXC, and D3DCompile。正如评论中指出的那样,CompileD3DShader只是书作者提供的一些帮助功能。这些天来,您只能致电D3DCompileFromFile。我还使用Microsoft::WRL::ComPtr,它是可以与现代Direct3D C++编程一起使用的很好的智能指针。

#include <d3d11.h>
#include <d3dcompiler.h>
#include <wrl/client.h>

using Microsoft::WRL::ComPtr;

...
ComPtr<ID3DBlob> shaderBlob;
ComPtr<ID3DBlob> errorBlob;
HRESULT hr = D3DCompileFromFile( L"SolidGreenColor.fx",
    nullptr,
    D3D_COMPILE_STANDARD_FILE_INCLUDE,
    "VS_Main", "vs_4_0",
    0 /* You probably want to use D3DCOMPILE_DEBUG in debug builds */,
    0,
    shaderBlob.GetAddressOf(),
    errorMsg.GetAddressOf()));

#ifdef _DEBUG
if (errorBlob)
{
    OutputDebugStringA( reinterpret_cast<const char*>( errorBlob->GetBufferPointer() ) );
}
#endif

if (FAILED(hr))
    // Error condition

学习Direct3D 11的其他有用的入门资源:

DirectX Tool Kit tutorials
Getting Started with Direct3D 11
Anatomy of Direct3D 11 Create Device

关于c++ - Windows 10上的DirectX 11,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45067894/

10-13 03:09