开始学习计算机图形学除了学习计算机图形学数学基础、理论基础之外,还需要选择一个合适的图形开发API。随着最近发布的许多新的图形开发API,新手往往会在选择哪个图形API学习的问题上产生困惑。鉴于学习单个 API 是一项非常艰巨的任务,不言而喻,学习者希望尽可能做出最佳选择,以免浪费时间。我编写了以下小指南,以便您可以对可能更喜欢学习的内容做出最明智的决定。

学习图形API最好不要从 Vulkan 或 D3D 12 开始,而应从 OpenGL 或 D3D 11 开始。

1 DirectX 12

计算机图形学 – 如何选择合适的图形API-StubbornHuang Blog

DirectX 12是专家的 API。它专为已经掌握 DirectX 11 的开发人员编写,这些开发人员由于性能要求的提高而需要对渲染管道进行更底层的控制。学习 DirectX 12 的人通常应该已经编写了一个非常复杂的 DirectX 11 引擎,并且对它的所有方面都有透彻的了解。如果这不能描述您的情况,那么您更适合学习其他 API 之一。

DirectX 12 的重点实际上是能够并行化您的图形工作流程,以有效控制您可以使用的所有 GPU。但这样做意味着编写大量代码来完成在 DirectX 11 中可以用一行编写的简单事情。

2 DirectX 11

计算机图形学 – 如何选择合适的图形API-StubbornHuang Blog

DirectX 11是领先的行业标准图形 API。即使在 DirectX 12 的同时,微软也发布了 DirectX 11.3,因为他们知道绝大多数编写图形引擎的人不需要 DirectX 12 提供的如此低级的控制。DirectX 11 还具有与 DirectX 12 相同的功能列表,因此您不会遗漏任何内容。此外,在对其他程序员编码的支持方面,您会发现大多数网站和论坛都将专注于 DirectX 11。

3 DirectX 10

计算机图形学 – 如何选择合适的图形API-StubbornHuang Blog

DirectX 10以前是学习 3D 图形编程的最佳现代图形 API。它今天唯一的缺点是它不支持硬件镶嵌,但这只是一个小问题。API 是从头开始设计的,主要关注利用新硬件,次要关注 API 内的组织。由于专注于使 API 井井有条,因此非常适合学习 3D 图形编程。同样的组织也被延续到 DirectX 11中。

4 DirectX 9及以下版本

计算机图形学 – 如何选择合适的图形API-StubbornHuang Blog

在所有 DirectX API 中,DirectX 9可能拥有最长的使用历史。从 2002 年一直到 2011 年,当人们开始最终迁移到 DirectX 11 时,它一直被广泛使用。因此,您可以在网上找到数量惊人的资源。然而,同时它不像 DirectX 10 和 DirectX 11 那样组织良好,并且在利用现代硬件方面存在一些限制。因此,在学习方面,我不建议再从这些较旧的 DirectX API 开始学习。

5 Vulkan

计算机图形学 – 如何选择合适的图形API-StubbornHuang Blog
Vulkan 是 Khronos 小组开发的最新跨平台图形 API。就像 DirectX 12 一样,这是一个专家的 API。它与 DirectX 12 提供的功能相似,并且在编程方面同样复杂。这不是适合初学者的 API。如果您主要对跨平台 API 感兴趣,那么最好从OpenGL 4开始学习。

6 OpenGL 4

计算机图形学 – 如何选择合适的图形API-StubbornHuang Blog

OpenGL 4 在功能和现代硬件利用率方面与 DirectX 11 等效,但其主要优势是跨平台。同样,如果您主要在 Linux 等操作系统上进行开发,那么这是使用硬件加速的高级图形 API 的唯一选择。与之前版本相比,OpenGL 4 中的更改并没有使其使用或学习变得更加复杂。出于这个原因,我推荐它作为跨平台图形开发的主要学习API。

7 OpenGL3.3及以下版本

计算机图形学 – 如何选择合适的图形API-StubbornHuang Blog

OpenGL 3.3 相当于 DirectX 10,可以处理跨平台。虽然这是一个非常强大且广泛使用的 API(有很多网络资源),但我仍然建议学习 OpenGL 4。比较这两个 API,你会发现它们之间的差异很小,所以学习最现代的版本是有意义的。不建议再学习OpenGL3.3以下版本。

8 Mantle

Mantle 也是 AMD 创建的专家 API。它是第一个发布的用于对 GPU 进行低级控制的 3D 图形 API,并且是推动 Microsoft 和 Khronos 集团开发自己的低级 API 的催化剂。然而,它只支持 AMD 图形硬件,这在由 Nvidia 主导的市场中是非常有限的。我个人认为学习这个API没有任何价值。

参考链接

  1. http://rastertek.com/choosing.html