DirectX/C++ 3D引擎编程:现在学习,还是等待DirectX 12?

5
我是一名相对不错的程序员,但是我的主要焦点一直是使用C#进行应用程序开发。我几乎没有游戏开发和3D引擎方面的经验 - 我已经开始阅读关于3D引擎通常是如何工作的内容,例如有一个很好的指南解释如何在C#中开发一个非常简单的基于软件的3D引擎,这非常有帮助,但这基本上总结了我对这个话题的整个经验。
此外,到目前为止我还没有真正地用过C++(尽管我知道与C#的基本概念差异,并认为在该语言中达到至少“足够”水平是可以掌握的)。
所以无论如何,出于纯粹的个人兴趣,我想玩弄开发 - 或者更确切地说,学习如何开发 - 简单的基于DirectX的三维图形引擎,以用于教育目的。
我只对图形部分感兴趣(无声音/动画/游戏状态/网络或任何东西,只有非常基础的输入)。渲染一些简单的几何体,然后逐步学习如何使用更现代的着色技术扩展它将是一个不错的选择。
我已经找到了一些很棒的资源。但在我深入研究这个话题之前:我知道DirectX12即将推出,看到它似乎会改变系统,我真的不确定API是否会发生很多重大变化。换句话说:我担心现在开始学习DirectX 11的内容,在几个月后,一切都会变得毫无用处,因为从编程角度来看,DirectX 12工作方式会有明显不同。
我不确定这方面的情况已经有多少被公众所知道,或者是否已经提供给开发人员。但是如果已经可以确定:你们是否建议我等待DX12,还是开始使用v11,因为未来的开发方式也将非常相似?
值得注意的是,当然我知道学习DX11在任何情况下都不会有坏处。但我不着急,如果我现在要学习的东西在几个月后就变得过时了,我宁愿等待那个时候慢慢开始。
2个回答

13

将DX12视为“没有训练轮,没有刹车,也许没有轮胎的DirectX”。

DirectX 12要想拥有丰富的教程、支持库、最佳实践、稳定的驱动程序以及广泛部署在终端用户机器上的支持,需要等待更长时间。目前它处于“前沿”状态,只适合GPU图形编程专家积极开发标题和引擎的人使用,以确保一切正常。

对于其他所有人,至少在未来一年左右,可能会更长时间地学习DirectX 11,具体取决于您的应用程序需求、个人技能水平以及同时学习的重点。

我可以说的是,使用遗留的DirectX SDK中的D3DX等内容来学习编程DirectX 11是DX12的死胡同。相反,应该专注于使用“现代”助手如DirectX Tool KitDirectXMath来进行C++编程的DirectX 11。

更新:DirectX 12工具包现已推出,附带一些教程。然而,最好先学习Direct3D 11,因为Direct3D 12是专为图形专家设计的API,对新手来说相当严格。如果您想走这条路线,了解如何使用DirectX 11工具包自然会映射到DirectX 12版本。


你的回答在2019年还适用吗?只是好奇你是否会在这一点上有其他建议,谢谢! - scape
3
DirectX 12仍然是一种“专家级API”,如果你想要学会它,你真的需要有使用DirectX 11的经验来帮助你克服非常陡峭的学习曲线。有时调试也相当具有挑战性,但现代的PIX工具可以很好地帮助解决这个问题。现在网络上提供的资源比它首次推出时更多了,正如我在更新中所指出的那样,《DirectX Tool Kit for DX12》也是一个选择。但我仍然建议你首先了解DirectX 11。 - Chuck Walbourn
1
如果您想要一些“并排比较”的例子来看DX11和DX12的区别,请参见GitHub - Chuck Walbourn

2
大部分使用DirectX 11的内容也适用于版本12,所以即使你切换到版本12,你所学到的大多数知识都是有用的。
事实上,就你的目的而言,你可能永远不需要切换。DirectX 12为CPU性能换取了易用性。它还需要Windows 10,因此在它普及之前要等上几个月。
尽管年代久远,但DirectX 9仍然广泛用于游戏制作。但如果从头开始,我不建议使用它。
还有一点,无论做什么,都不要选择DirectX 10。DirectX 11可以在相同的显卡和操作系统上执行所有相同的任务。

2
DirectX 9 仍然受到支持有三个原因: (a) 很多引擎和现有工具已经编写了代码路径, (b) Xbox 360 是 Direct3D 9,虽然有很多扩展,但可能不完全正确,但它确实使“DirectX 9时代的设计”得以长期存在,并且(c) 针对中国或俄罗斯特定目标的人,您确实需要针对 Windows XP。 话虽如此,在现代 Windows 平台上,Direct3D 9 的调试和工具支持对于 DirectX 9 缺乏并且越来越多地被模拟而不是以任何意义上的“直接”的方式存在。 - Chuck Walbourn
3
DX11是学习DirectX的当前“最佳选择”,适用于所有受支持的Microsoft平台:Windows Vista SP2+KB971644或更高版本支持Windows桌面应用程序的DX11,并且它是Windows 8.x存储、Xbox One、Windows phone 8以及Windows 10通用Windows应用程序所需的最低要求。此外,工具支持良好,并且可以找到许多替代遗留D3DX工具,用于支持DX11。支持库甚至对于DX12的正确使用模式的理解也还在发展中。 - Chuck Walbourn
使用DirectX 9的另一个原因是,如果您需要支持旧的D3D9图形卡,可以在DX9上使用Shader model 3(以及2a / 2b)。DX 10和11支持它们,但仅支持shader model 2。 - Adam
是的,但这真的是一个边缘情况,这就是为什么10level9不公开真正的Shader Model 3.0 - 而且它增加了很多技术复杂性。通常来说,维护整个Direct3D 9代码路径并不值得,只是为了处理某些卡片上的技术细节。如果您因其他原因拥有Direct3D 9代码路径,那么也许您可以将在此特定配置中使用它的少数客户推向它,但大多数人最好使用Direct3D 11代码路径,除非他们正在运行Windows XP。 - Chuck Walbourn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接