DirectX/C++ 3D 引擎编程:立即学习,还是等待 DirectX 12? [关闭]

Posted

技术标签:

【中文标题】DirectX/C++ 3D 引擎编程:立即学习,还是等待 DirectX 12? [关闭]【英文标题】:DirectX/C++ 3D Engine programming: Learn now, or wait for DirectX 12? [closed] 【发布时间】:2015-06-25 12:34:18 【问题描述】:

我是一个相对不错的程序员,但到目前为止,我的主要关注点是使用 C# 进行应用程序开发。我在游戏开发和 3d 引擎方面的经验几乎为零 - 我已经开始阅读 3d 引擎的一般工作原理,例如有一个很棒的指南解释了如何用 C# 开发一个非常简单的基于软件的 3D 引擎。非常有帮助,但这几乎总结了我对该主题的全部经验。 此外,到目前为止,我还没有真正使用 C++(尽管我知道与 C# 的基本概念差异,并且会考虑以可管理的语言达到至少“足够”的速度)。

因此,无论如何,出于纯粹的个人兴趣,我想尝试开发——或者更确切地说,学习如何开发——用于教育目的的简单的基于 DirectX 的 3d 图形引擎。 我只是对图形部分感兴趣(没有声音/动画/游戏状态/网络或其他任何东西,只有非常基本的输入)。渲染一些简单的几何图形,然后逐步学习如何使用更现代的着色技术对其进行扩展。

我已经为此找到了一些很棒的资源。但在深入探讨这个话题之前:我知道 DirectX12 即将到来,并且看到它似乎对系统进行了多大的改进,我真的不确定 API 是否会有很多重大变化。或者换句话说:恐怕我现在就开始学习 DirectX 11 的东西,而且从现在开始的几个月内它都将毫无用处,因为从编程的角度来看,DirectX 12 的工作方式明显不同。

我不确定其中有多少是已知的,或者是否已经有开发人员以前可供广大公众使用。但是如果已经可以说:你们会建议我等待 DX12,还是从 v11 开始,因为未来的开发会非常相似?

为了记录,我当然知道学习 DX11 在任何情况下都不会受到伤害。但我并不着急,如果我现在所学的一半在几个月后就过时了,我宁愿等到那时再慢慢开始。

【问题讨论】:

【参考方案1】:

将 DX12 想象成“没有辅助轮、没有刹车、目前可能没有轮胎的 DirectX”。

DirectX 12 需要“几个月”才能在最终用户计算机上的操作系统中获得丰富的教程、支持库、最佳实践、坚如磐石的驱动程序和广泛部署的支持。它现在是“流血边缘”,并且最适合 GPU 图形编程专家使用,他们现在积极致力于标题和引擎,并希望确保一切正常。

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

我可以说的是,学习使用 D3DX 之类的 legacy DirectX SDK 编程 DirectX 11 对 DX12 来说是一条死胡同。转而关注 DirectX 11,使用“现代”助手,例如 C++ 的 DirectX Tool Kit 和 DirectXMath。

Anatomy of Direct3D 11 Create Device The Care and Feeding of Modern Swap Chains Direct3D Win32 Game Visual Studio template DirectX SDK Samples Catalog DirectX SDK Tools Catalog Living without D3DX DirectX SDKs of a certain age

更新: DirectX Tool Kit for DirectX 12 和一些 tutorials 现在可用。也就是说,最好先学习 Direct3D 11,因为 Direct3D 12 是为图形专家设计的 API,对新手来说非常难理解。如果您想走这条路,知道如何使用 DirectX Tool Kit for DX11 自然会映射到 DirectX 12 版本。

【讨论】:

您的答案在 2019 年的近年表现如何?只是好奇你是否会在这一点上提出其他建议,谢谢! DirectX 12 在很大程度上仍然是一个“专家 API”,您确实需要使用 DirectX 11 的经验来帮助您走上非常陡峭的学习曲线。有时调试也很有挑战性,尽管现代的PIX tool 有很大帮助。网络上的资源比首次引入时更多,正如我在更新中指出的那样,DirectX Tool Kit for DX12 现在也是一种选择。我仍然建议您先了解 DirectX 11。 如果您想要一些“并排”示例来了解 DX11 与 DX12 有何不同,请参阅GitHub。【参考方案2】:

如果您切换到版本 12,您将使用 DirectX 11 学到的大部分内容都将适用。

事实上,出于您的目的,您可能永远不需要切换。 DirectX 12 从本质上牺牲了 CPU 性能的易用性。它还需要 Windows 10,因此它还需要几个月的时间才能被广泛使用。

DirectX 9 尽管年代久远,但仍被广泛用于制作游戏。不过,如果您是从头开始,我不会推荐它。

哦,无论您做什么,都不要选择 DirectX 10。DirectX 11 可以在相同的显卡和操作系统上做所有相同的事情。

【讨论】:

DirectX 9 仍然受支持,原因有以下三个:(a) 代码路径已经为许多引擎和现有工具编写,(b) Xbox 360 是 Direct3D 9,尽管它有很多扩展,可能并不完全正确正确,但它使“DirectX 9 时代设计”保持了很长时间,并且 (c) 对于专门针对中国或俄罗斯的人来说,您确实有针对 Windows XP 的目标。也就是说,DirectX 9 缺乏现代 Windows 平台上的调试和工具支持或 Direct3D 9,并且越来越多地被模拟,而不是任何意义上的“直接” DX11 是当前学习 DirectX 的“最佳位置”,适用于所有受支持的 Microsoft 平台:Windows Vista SP2+KB971644 或更高版本支持 Windows 桌面应用程序的 DX11,它是 Windows 所需的最低要求8.x 商店、Xbox One、Windows phone 8 和适用于 Windows 10 的通用 Windows 应用程序。另外,工具支持很好,你可以找到很多支持 DX11 的 legacy D3DX stuff 的替代品。支持库甚至对 DX12 正确使用模式的理解仍在开发中。 使用 DirectX 9 的另一个原因 - 如果您需要支持旧的 D3D9 显卡,您可以在它们上使用带有 DX9 的 Shader model 3(和 2a/2b)。 DX 10 和 11 支持它们,但仅适用于着色器模型 2。 是的,但如今这确实是一个极端情况,这就是为什么 10level9 没有公开真正的 Shader Model 3.0 的原因——而且它增加了很多技术上的复杂性。一般来说,仅仅为了某些卡上的技术细节而维护整个 Direct3D 9 代码路径是不值得的。如果您出于某种原因碰巧拥有 Direct3D 9 代码路径,那么您可能会推动在此特定配置中拥有的少数客户使用它,但除非他们运行的是 Windows XP,否则使用 Direct3D 11 代码路径可以更好地为大多数客户提供服务。

以上是关于DirectX/C++ 3D 引擎编程:立即学习,还是等待 DirectX 12? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从0开发3D引擎:函数式反应式编程及其在引擎中的应用Web 3D是否需要WebAssembly?

从0开发3D引擎:函数式编程及其在引擎中的应用

游戏开发主要需要啥软件?

如何学好游戏3D引擎编程

用函数式编程,从0开发3D引擎和编辑器

学习unity3D需要多久