关于

本教程将教您使用Vulkan 图形和计算 API的基础知识。Vulkan 是Khronos 组 (以 OpenGL 闻名)的一个新 API,它提供了对现代显卡更好的抽象。这个新界面让您可以更好地描述您的应用程序打算做什么,与OpenGL 和Direct3D等现有 API 相比,这可以带来更好的性能和更少令人惊讶的驱动程序行为。Vulkan 背后的想法类似于Direct3D 12 和Metal的想法,但 Vulkan 具有完全跨平台的优势,允许您同时针对 Windows、Linux 和 Android 进行开发。

但是,您为获得这些好处而付出的代价是您必须使用更加冗长的 API。与图形 API 相关的每个细节都需要由您的应用程序从头开始设置,包括初始帧缓冲区创建和缓冲区和纹理图像等对象的内存管理。图形驱动程序会少很多手操作,这意味着您必须在应用程序中做更多的工作来确保正确的行为。

这里要传达的信息是 Vulkan 并不适合所有人。它针对的是热衷于高性能计算机图形,并愿意投入一些工作的程序员。如果你对游戏开发更感兴趣,而不是计算机图形,那么你不妨坚持使用OpenGL或Direct3D,它们会不会很快被弃用以支持 Vulkan。另一种选择是使用Unreal Engine 或Unity引擎,它们将能够使用 Vulkan,同时向您公开更高级别的 API。

顺便说一下,让我们介绍一些遵循本教程的先决条件:

  • 与 Vulkan(NVIDIAAMDIntelApple Silicon(或 Apple M1))兼容的显卡和驱动程序
  • 有 C++ 经验(熟悉 RAII、初始化列表)
  • 一个支持 C++17 特性的编译器(Visual Studio 2017+、GCC 7+ 或 Clang 5+)
  • 一些现有的 3D 计算机图形经验

本教程不会假设您了解 OpenGL 或 Direct3D 概念,但它确实要求您了解 3D 计算机图形的基础知识。例如,它不会解释透视投影背后的数学原理。有关 计算机图形概念的精彩介绍,请参阅此在线书籍。其他一些很棒的计算机图形资源是:

如果需要,您可以使用 C 而不是 C++,但您将不得不使用不同的线性代数库,并且您将在代码结构方面靠自己。我们将使用类和 RAII 等 C++ 特性来组织逻辑和资源生命周期。本教程还有一个可供 Rust 开发人员使用的替代版本

为了让使用其他编程语言的开发人员更容易跟进,并获得一些基本 API 的经验,我们将使用原始 C API 与 Vulkan 配合使用。但是,如果您使用 C++,您可能更喜欢使用较新的Vulkan-Hpp绑定,这些绑定抽象了一些脏工作并有助于防止某些类别的错误。

电子书

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

教程结构

我们将首先概述 Vulkan 的工作原理以及我们必须做的工作才能在屏幕上显示第一个三角形。在您了解了它们在整个画面中的基本作用之后,所有较小步骤的目的将更有意义。接下来,我们将使用Vulkan SDK、用于线性代数运算的GLM 库和 用于创建窗口的GLFW来设置开发环境。本教程将介绍如何在带有 Visual Studio 的 Windows 和带有 GCC 的 Ubuntu Linux 上设置这些。

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

  • 介绍一个新概念及其目的
  • 使用所有相关的 API 调用将其集成到您的程序中
  • 将它的一部分抽象为辅助函数

尽管每一章都是作为前一章的后续章节编写的,但也可以将这些章节作为介绍某个 Vulkan 功能的独立文章来阅读。这意味着该站点也可用作参考。所有 Vulkan 函数和类型都链接到规范,因此您可以单击它们以了解更多信息。Vulkan 是一个非常新的 API,因此规范本身可能存在一些不足。我们鼓励您向此 Khronos 存储库提交反馈 。

如前所述,Vulkan API 有一个相当冗长的 API,其中包含许多参数,可以让您最大限度地控制图形硬件。这会导致创建纹理等基本操作需要每次都必须重复执行很多步骤。因此,我们将在整个教程中创建我们自己的辅助函数集合。

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

本教程旨在成为社区的努力。Vulkan 仍然是一个非常新的 API,尚未真正建立最佳实践。如果您对教程和站点本身有任何类型的反馈,请随时向GitHub 存储库提交问题或拉取请求。您可以观看存储库以获取有关教程更新的通知。

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

如果您以前使用过图形 API,那么您就会知道在第一个几何图形出现在屏幕上之前可能需要很多步骤。Vulkan 中有许多这样的初始步骤,但您会发现每个单独的步骤都很容易理解并且不会觉得多余。同样重要的是要记住,一旦你有了那个看起来很无聊的三角形,绘制完全有纹理的 3D 模型就不需要那么多额外的工作了,而且每一步都更有意义。

如果您在学习本教程时遇到任何问题,请首先查看常见问题解答以查看您的问题及其解决方案是否已在其中列出。如果在那之后您仍然卡住,那么请随时在最接近的相关章节的评论部分寻求帮助。

官方文档:Introduction - Vulkan Tutorial

Logo

更多推荐