Vulkan 教程
在遵循本教程之前,请阅读此内容。本教程是在 Vulkan 于 2016 年首次发布后不久编写的。自那时以来,许多事情发生了变化,这个教程不再反映今天使用 Vulkan 的最佳方法。与其阅读这个网站,我建议您遵循这里链接的指南或其中一个教程:https://vulkan.org/learn 关于本教程将教您使用 Vulkan 图形和计算 API 的基础知识。Vulkan是由 Khronos 组(以 OpenGL 著称)推出的新 API,提供了对现代显卡的更好抽象。这个新接口允许您更好地描述您的应用程序意图,从而与现有 API(如 OpenGL 和 Direct3D)相比,可能带来更好的性能和更少的意外驱动程序行为。Vulkan 的理念与 Direct3D 12 和 Metal 类似,但 Vulkan 的优势在于它是完全跨平台的,允许您同时为 Windows、Linux 和 Android 开发。不过,您为这些好处所付出的代价是您必须使用一个显著更冗长的 API。所有与图形 API 相关的细节都必须由您的应用程序从头开始设置,包括初始帧缓冲区的创建和对象(如缓冲区和纹理图像)的内存管理。图形驱动程序将提供更少的支持,这意味着您将不得不在应用程序中做更多的工作,以确保正常行为。这里的主要信息是 Vulkan 并不适合所有人。它面向对高性能计算机图形充满热情,并愿意付出一些努力的程序员。如果您对游戏开发更感兴趣,而不是计算机图形,那么您可能希望坚持使用 OpenGL 或 Direct3D,后者不会很快被 Vulkan 替代。另一种选择是使用 Unreal Engine 或 Unity 等引擎,这些引擎能够使用 Vulkan,同时向您暴露更高层次的 API。 在此之前,我们先讨论一下遵循本教程的一些先决条件: - 与 Vulkan 兼容的显卡和驱动程序(NVIDIA、AMD、Intel、Apple Silicon(或 Apple M1)) - 拥有 C++ 经验(熟悉 RAII,初始化列表) - 一个具有良好 C++17 特性支持的编译器(Visual Studio 2017+、GCC 7+,或 Clang 5+) - 一些现有的 3D 计算机图形经验 本教程将不假设对 OpenGL 或 Direct3D 概念的了解,但要求您了解 3D 计算机图形的基础知识。它不会解释透视投影背后的数学。例如,可以参考这本在线书籍,了解计算机图形概念的一些很好的介绍。此外,还有一些其他很好的计算机图形资源: - 周末一小时光线追踪 - 物理基础渲染书籍 - 在开源的 Quake 和 DOOM 3 中使用 Vulkan 如果您愿意,也可以使用 C 而不是 C++,但您不得不使用不同的线性代数库,并在代码结构上完全依靠自己。我们将使用 C++ 特性,例如类和 RAII 来组织逻辑和资源生命周期。此外,还有两个可供 Rust 开发者使用的替代版本的教程:基于 Vulkano 和基于 Vulkanalia。 为了便于使用其他编程语言的开发者跟随,并获取我们将使用的基础 API 的一些经验,我们将使用原始的 C API 来处理 Vulkan。不过,如果您使用 C++,您可能更喜欢使用较新的 Vulkan-Hpp 绑定,它抽象出了一些繁琐的工作,并帮助防止某些类别的错误。 电子书 如果您更喜欢将本教程作为电子书阅读,您可以在这里下载 EPUB 或 PDF 版本: - EPUB - PDF 教程结构 我们将从 Vulkan 工作原理概述开始,以及我们需要做什么以将第一个三角形显示在屏幕上。所有小步骤的目的将在您理解它们在整体图景中基本作用后变得更加明确。接下来,我们将使用 Vulkan SDK、GLM 库(用于线性代数操作)和 GLFW(用于窗口创建)设置开发环境。本教程将涵盖如何在 Windows 上使用 Visual Studio 和在 Ubuntu Linux 上使用 GCC 设置这些框架。之后,我们将实现 Vulkan 程序中渲染第一个三角形所需的所有基本组件。每章大致遵循以下结构: - 介绍一个新概念及其目的 - 使用所有相关的 API 调用将其集成到您的程序中 - 将其部分内容抽象为辅助函数 尽管每一章都是在前一章的基础上写的,但也可以将各章作为介绍特定 Vulkan 特性的独立文章阅读。这意味着该网站也可作为参考。所有 Vulkan 函数和类型都链接到规范,因此您可以点击它们以了解更多信息。Vulkan 是一个非常新的 API,因此可能会在规范本身中存在一些不足之处。鼓励您向 Khronos 提交反馈。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡