0

我对 DirectX 非常陌生,并且只学习了一周。我发现并从中学习的一系列强大课程是braynzarsoft d3d12 课程。很难,有很多资料,但这是我喜欢的。

课似乎没上完,我决定在网上搜索一下如何制作一个球体,也许有现成的顶点矩阵,或者一些描述球体顶点的算法。我发现了这个问题,有人说我正在做的事情实际上已被弃用,现在我应该使用DirectX 工具包进行编程。

我真的很困惑——我做得很好,但我所有的代码都可以完美运行,而且只要我想要。

有 DirectX 编程经验的人可以向我解释为什么我正在做的事情被弃用,我应该做什么,以及我在哪里可以获得球体顶点?


目前,我编写了简单的顶点和像素着色器,初始化了一个 d3d12 设备,交换链,命令列表,描述了四边形的顶点,并编写了一个可以添加、移动、旋转和缩放立方体的类,我Update()之前在调用中完成了这些UpdatePipeline().


我的尝试

在 DirectxTK 中有一个函数D3DXCreateSphere,它具有LPD3DXMESH *ppMeshLPD3DXBUFFER *ppAdjacency接口作为输出参数。也许,我可以从他们那里得到我需要的顶点数组。但无论如何,我不可能将 DirectxTK 代码与我的.

4

1 回答 1

2

简短的回答是,作为 Windows 8 SDK(大约 2011 年)开发工作的一部分,“DirectX SDK”已迁移到 Windows SDK。DirectX 库、头文件和工具被移到 Windows SDK 中,并且“DirectX SDK”被宣布弃用(即 DirectX SDK 2010 年 6 月版本是最后一个版本)。

Microsoft 将 Windows 8 的示例移到了网上,因此 DirectX SDK 中的大多数示例都被放弃了,转而使用Windows Store/UWP示例。作为一个个人项目,我已经在GitHub 上更新了一堆 Direct3D 11 示例,因此它们只使用 Windows SDK。

如Microsoft Docs页面所述,在此迁移中遗留了许多技术。

  • Direct3D 9 开发被认为是遗留的,仍然使用它的主要原因是 Windows XP 支持。Windows 8 SDK 不支持 Windows XP 开发--Visual Studio 2012-2017 支持使用 Windows 7.1A SDK 进行 Windows XP 开发。如果您想以 Direct3D 9 为目标,则基本上只能使用旧版 DirectX SDK——尽管有些引擎有足够的自己的帮助代码,它们并不真正需要 D3DX9。

  • Direct3D 10 开发被认为是遗留的。Direct3D 11 是 Direct3D 10 的严格超集,受相同版本的 Windows 支持,并且功能级别机制意味着 Direct3D 11 可以在比 Direct3D 10更多的硬件上工作。因此,D3DX10不推荐使用帮助程序库。

  • XACT 库未结转。它主要是为 Xbox 360 创建的,因此已被弃用。

  • 托管 DirectX 1.1 已被弃用多年(~2005 年)

请参阅僵尸 DirectX SDK和DirectX SDK在哪里?

至于您应该使用什么,我创建了许多库来替换 D3DX9/D3DX10/D3DX11 中的内容。看看没有 D3DX 的生活

对于 DirectX 12 开发,旧版 DirectX SDK从不支持它。示例在GitHub 上,否则您应该只使用 Windows 10 SDK。我在GitHub 上也有适用于 DirectX 12的DirectX Tool Kit版本。也就是说,如果您是 DirectX 新手,您应该真正考虑从DirectX 11开始。

这样的东西,但它与旧图书馆D3DX12不太一样。有用于加载纹理、进行 BC 压缩等的代码,并且需要 header 和 runtime 。将其与您的游戏一起发布的唯一方法是使用旧版DirectX 设置D3DX11D3DX11DLLDLL

D3DX12只是一些辅助函数的标题。没有 DLL 也没有 REDIST。当您创建 DirectX 12 Visual Studio 模板时,它通常会被复制到项目中,您可以从GitHub下载它。

DirectX Tool Kit for DX11DX12DirectXTexDirectXMeshDirectXMathUVAtlas提供了很多功能D3DX9,但同时支持 DirectX 11D3DX10D3DX11DirectX 12。它们都是开源的,因此没有 DLL 或 REDIST:您只需构建它从源头自己。它们不是“插入式”替代品,但它们以更现代的 C++ 形式提供相同的功能。它们支持为经典“Win32”开发、通用 Windows 平台 (UWP) 应用程序或 Xbox One 编写的任何 C++ 程序。

实际上,这是过去十年我在博客中讨论的主要话题。如果您想了解有关正在发生的事情的更多信息,那里有很多详细信息。

更新:虽然仍然建议使用 D3DX9/D3DX10/D3DX11 的开源替代品,并且 Direct3D 11 或 Direct3D 12 易于采用,但当然有很多现有的教程和代码库使用 D3DX。为了支持这些场景,避免尝试将旧版 DirectX SDK 与现代 Windows SDK 结合使用,您可以使用Microsoft.DXSDK.D3DX NuGet包。使用这个包,我能够将所有 Direct3D 9 和 Direct3D 10 旧版 DirectX SDK 示例重新发布到GitHub

于 2020-03-28T00:58:00.137 回答