首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows 10上的DirectX 11

Windows 10上的DirectX 11
EN

Stack Overflow用户
提问于 2017-07-12 21:36:02
回答 1查看 2.8K关注 0票数 3

我只是试着学习DirectX 11 (不,我对OpenGL和Vulcan都不感兴趣),我正在使用最新的Windows 10内部构建。我知道有DirectX 12,但据我所知,这是更多的麻烦非-(A)AA比它的价值。我非常清楚,对于一个游戏的启动和运行,使用一个已经存在的游戏引擎,如虚幻引擎将是更合适的。但我并不是真正感兴趣的一个工作游戏。我只想要一些没有贬值和好的东西来代替GDI(+)。我一直想学DirectX。我使用的是C++,顺便说一句,这是主要的编程语言。作为我的IDE,我正在使用VisualStudio2017 Enterprise。我还应该补充一点,我熟悉Windows (以前称为Win32 API)。

我可以阅读艾伦·舍罗德和温迪·琼斯的“开始DirectX 11游戏编程”和弗兰克·D·露娜的书“DirectX 11 3D游戏编程导论”。但这两本书都存在一个主要问题:他们使用的是已经贬值的DirectX 11 6月11日SDK,它既不兼容Windows 8,也不兼容10 SDK。虽然用WinAPI代码替换错误管理代码很容易,但我仍然坚持:

代码语言:javascript
运行
复制
bool compileResult = CompileD3DShader( "SolidGreenColor.fx", "VS_Main", "vs_4_0", &vsBuffer );

CompileD3DShader似乎不存在。我在谷歌搜索的时候运气不佳。但根据我的发现,我得出的结论是,他们不仅重新命名了它,而且用其他机制取代了它。虽然我不太确定。有人能帮我用Windows 8/10兼容的方式写这一行吗?

还有另一个问题,如果我对使用旧的DirectX SDK不感兴趣,这些书是否有用?我正在考虑寻找好的在线教程。如果没有足够好的书,我会被迫切换到露娜的DirectX 12书和一般的DirectX 12。不幸的是,DirectX 12似乎并不是DirectX 11游戏编程的继承者(分别为DirectX 9和10编写了一本书),我更喜欢它(我更喜欢先学习API的基础知识,这样以后我就可以专注于数学了)。

有没有人知道一个好的,全面的来源来学习“现代”DirectX 11?我对书籍和在线内容(包括YouTube视频)都是开放的。

更新1:考虑到征求关于其他学习材料的建议似乎是不允许的(我忘记了,很抱歉),我想强调我问题中最重要的部分。

为旧的Direct编写的书籍/在线教程是否仍然适用于Windows 8/ 8.1 / 10 SDK?我知道我必须使用不同的头,有些东西已经被重新命名,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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 05:54:11

关于Direct3D 11的所有书籍仍然适用于对核心API的介绍、如何使用DirectX 11的概念和功能。这些问题都是由于使用了现在遗留的DirectX SDK而产生的。特别是D3DX、D3DXMath或XNAMath,以及遗留效果系统的使用。尽管如此,您最终还是会学习如何进行Direct3D图形编程。我有一篇博文,详细介绍了各种书籍的细节,还有一些值得留心的笔记。见书籍推荐。自我注意:我应该看看谢罗德和琼斯的书,并更新这篇文章。

请参阅DirectX SDK (2015年版)在哪里?,特别是关于将Windows8.1/10 SDK与遗留的DirectX SDK“混合”的适当方法的MSDN,如果您仍然希望使用旧的DirectX SDK来学习。

关于如何在使用Windows8.1SDK或Windows10SDK时替换所有遗留的DirectX SDK的完整指南是无D3DX生活。您将注意到着色器编译API,它链接到HLSL、FXC和D3DCompile。正如注释中所指出的,CompileD3DShader只是图书作者提供的一些帮助函数。现在你可以直接打电话给D3DCompileFromFile了。我还使用了Microsoft::WRL::ComPtr,它是一个很好的智能指针,可以与现代的Direct3D C++编程一起使用。

代码语言:javascript
运行
复制
#include <d3d11.h>
#include <d3dcompiler.h>
#include <wrl/client.h>

using Microsoft::WRL::ComPtr;

..。

代码语言:javascript
运行
复制
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工具包教程

开始使用Direct3D 11

Direct3D 11创建装置的解剖

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45067894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档