Vulkan API官方教程中文翻译 (一) 简介

关于

这个教程将会教你使用Vulkan图形计算API的基础。Vulkan是Khronos Group(曾开发过OpenGL)开发的新API,为现代显卡提供了更好的抽象。这个新接口允许用户更好地描述用户想要做的行为,与现有的API(如OpenGL和Direct3D)相比,可以带来更好的性能和更少的意外的驱动行为。Vulkan背后的思想类似于Direct3D 12Metal,但Vulkan具有跨平台的优势,允许您同时为Windows,Linux和Android开发。

然而,您需要为这些好处付出的代价是您必须使用更加复杂的API。每个与图形API相关的细节都需要由您的应用程序从头开始设置,包括初始化帧缓冲区创建和缓冲区和纹理图像等对象的内存管理。图形驱动控制的事情会更少,这意味着您必须在应用程序中完成更多工作以确保正确的行为。

这里的意思是Vulkan并不适合所有人,他的目标在于那些热衷高性能计算机图形、并且愿意投入的程序员。如果你对游戏开发更感兴趣,而不是计算机图形,那么你可能希望坚持使用OpenGL或Direct3D,这些都不会在很快就被弃用而不支持Vulkan。另一种方法是使用像Unreal引擎Unity这样的引擎,它可以使用Vulkan,同时为您提供更高级别的API。

除此之外,让我们介绍一下学习本教程的一些前置条件:

  • 与Vulkan兼容的显卡和驱动程序(NVIDIAAMDIntel
  • C++编程经验
  • 兼容C++11的编译器(Visual Studio 2013+,GCC 4.8+)
  • 有过一些3D计算机图形编程经验

本教程不会假设你会OpenGL或Direct3D概念的知识,但它确实需要您了解3D计算机图形的基础知识。例如,它不会解释透视投影背后的数学。有关计算机图形概念的详细介绍,请参阅此在线手册

如果需要,您可以使用C而不是C++,但是您必须使用不同的线性代数库,并且您将在代码结构方面独立使用。我们将使用类和RAII等C++特性来组织逻辑和资源生命周期。

电子书

如果您希望将本教程作为电子书阅读,那么您可以在此处下载EPUB或PDF版本:

教程结构

我们将首先概述Vulkan的工作原理以及我们为了获得屏幕上的第一个三角形而必须做的工作。在了解了每一个小步骤在整个场景所扮演的基本角色之后,将会更有意义。接着,我们将使用Vulkan SDK,用于线性代数的GLM库和用于窗口创建的GLFW来搭建开发环境。本教程将介绍如何使用Visual Studio在Windows上进行设置,以及在使用GCC的Ubuntu Linux上进行设置。

之后,我们将实现Vulkan程序的所有基本组件,这些组件是渲染第一个三角形所必需的。每章将大致遵循以下结构:

  • 介绍一个新的概念和他的目的
  • 用相应的API调用和将它整合进你的程序
  • 它的抽象成为辅助函数

尽管每章都是作为前一章的后续内容编写的,但也可以将这些章节作为引入某个Vulkan功能的独立文章阅读。这意味着该网站也可用作参考。所有Vulkan函数和类型都链接到规范,因此您可以单击它们以了解更多信息。Vulkan是一个十分新的API,所以可能在规范上有一些缺点。我们鼓励您向Khronos repository提交反馈。

就像前面提到那样,Vulkan API中有许多带有许多参数的复杂的API,可以最大限度地控制图形硬件。这会导致创建纹理等基本操作,需要执行大量且不得不重复的步骤。因此,我们将会在整个教程中创建自己的辅助函数集。

*每章还将以完整代码列表的链接结束。如果您对代码的结构有任何疑问,或者您正在处理错误并希望进行比较,则可以参考它。所有代码文件都已经在多家供应商的显卡上进行了测试,以验证其正确性。每一章的最后都有一个评论部分(并没有,请到原文),您可以在其中提出与特定主题相关的任何问题。请标注您的平台,驱动程序版本,源代码,预期行为和实际行为,以帮助我们为您提供帮助。

这个教程是社区的成果,Vulkan仍然是一个新的API,最佳的学习路线还没确定。如果你有对这个教程和网站本身任何类型的反馈,请不要犹豫,向GitHub repository提出issue或者提交请求。您可以关注repository以获得有关本教程更新的通知。

在您完成了在屏幕上绘制第一个由Vulkan驱动三角形之后,我们将开始扩展程序以包括线性变换,纹理和3D模型。

如果你以前玩过图形API,那么您就会知道在第一个图形出现在屏幕上之前可能会有很多步骤。在Vulkan中有非常多的这种初始化步骤,但是你会了解每一步都很容易理解,并且不会感到多余。同样重要的是要记住,一旦你掌握了那个看起来很无聊的三角形,绘制带有纹理的3D模型并不需要那么多额外的工作,之后的每一点都会更有价值。

如果你在学习本教程中遭遇了一些问题,首先检查FAQ,看看您的问题及其解决方法是否已在此处给出。如果在这之后你仍然卡住,那么请自由地在最近的相关章节的评论部分寻求帮助。

准备好深入学习未来的高性能图形API了吗?出发

评论