|
| 1 | +## 关于 |
| 2 | + |
| 3 | +本教程将教您使用 [Vulkan](https://www.khronos.org/vulkan/) 图形和计算 API 的基础知识。 Vulkan 是 [Khronos group](https://www.khronos.org/) 小组(以 [OpenGL](https://en.wikipedia.org/wiki/OpenGL) 闻名)的一个新 API, |
| 4 | + 它提供了更好的现代显卡抽象应用接口。与 [OpenGL](https://en.wikipedia.org/wiki/OpenGL) 和 [Direct3D](https://en.wikipedia.org/wiki/Direct3D) 等现有图形 API 相比,这个新接口允许您更好地描述您的应用程序打算做什么,这可以带来更好的性能和更少令人惊讶的驱动程序行为。优势,允许您同时为 Windows、Linux 和 Android 进行开发。 |
| 5 | +Vulkan 背后的想法与 [Direct3D 12](https://en.wikipedia.org/wiki/Direct3D#Direct3D_12) 和 [Metal](https://en.wikipedia.org/wiki/Metal_(API)) 的想法相似,但 Vulkan 具有完全跨平台的优势,允许您同时为 Windows、Linux 和 Android 进行开发。 |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | +但是,您为这些好处付出的代价是您必须使用更加冗长的 API。 与图形 API 相关的每个细节都需要由您的应用程序从头开始设置,包括初始帧缓冲区创建和缓冲区和纹理图像等对象的内存管理(正文部分将对这些概念详细展开)。 图形驱动程序将减少很多手持操作,这意味着您必须在应用程序中做更多的工作以确保正确的行为。 |
| 10 | + |
| 11 | +Vulkan的特性并不适合所有人。 它针对的是对高性能计算机图形充满热情并愿意投入一些工作的程序员。如果您对游戏开发而不是计算机图形更感兴趣,那么您可能希望坚持使用 OpenGL (基于软件逻辑状态机设计的图像渲染接口,支持windows、linux、max、android,接口较为简单) 或 Direct3D (windows下图像渲染接口),这些技术不会很快被 Vulkan 弃用。 另一种选择是使用像 [Unreal Engine](https://en.wikipedia.org/wiki/Unreal_Engine#Unreal_Engine_4)这样的引擎,它们将能使用 Vulkan,同时向您提供更高级别的 API。 |
| 12 | + |
| 13 | +为减少学习障碍,让我们介绍一些学习本教程的先决条件: |
| 14 | + |
| 15 | +* 一张计算机显卡以及支持Vulkan接口的显卡驱动程序 ([NVIDIA](https://developer.nvidia.com/vulkan-driver), [AMD](http://www.amd.com/en-us/innovations/software-technologies/technologies-gaming/vulkan), [Intel](https://software.intel.com/en-us/blogs/2016/03/14/new-intel-vulkan-beta-1540204404-graphics-driver-for-windows-78110-1540), [Apple Silicon (Or the Apple M1)](https://www.phoronix.com/scan.php?page=news_item&px=Apple-Silicon-Vulkan-MoltenVK)) |
| 16 | +* C++基础知识 (熟悉资源获取即初始化,初始化列表) |
| 17 | +* 支持c++17特性的编译器 (Visual Studio 2017+, GCC 7+, 或 Clang 5+) |
| 18 | +* 一些3D计算机图形学基础知识 |
| 19 | + |
| 20 | +本教程不要求您了解 OpenGL 或 Direct3D 概念,但要求您了解 3D 计算机图形学的基础知识。 例如,它不会解释透视投影背后的数学。 有关计算机图形学概念的精彩介绍,请参阅[相关在线书籍](https://paroj.github.io/gltut/)。 其他一些很棒的计算机图形资源教程是: |
| 21 | +* [一周学会光线追踪](https://github.com/RayTracing/raytracing.github.io) |
| 22 | +* [基于物理的真实环境渲染](http://www.pbr-book.org/) |
| 23 | +* 基于Vulkan引擎的[雷神之锤](https://github.com/Novum/vkQuake)与[毁灭公爵3](https://github.com/DustinHLand/vkDOOM3)的开源游戏项目。 |
| 24 | + |
| 25 | +如果您愿意,您可以使用 C 而不是 C++,但您必须使用不同的线性代数库,并且您将在代码结构方面靠自己。我们将使用类和 RAII 等 C++ 特性来组织逻辑和资源生命周期。本教程还有一个可供 Rust 开发人员使用的[替代版本](https://github.com/bwasty/vulkan-tutorial-rs)。 |
| 26 | + |
| 27 | +为了让使用其他编程语言的开发人员更容易理解,并获得一些使用基本 API 的经验,我们将使用原始 C API 来使用 Vulkan。 但是,如果您使用 C++,您可能更喜欢使用较新的 [Vulkan-Hpp 封装](https://github.com/KhronosGroup/Vulkan-Hpp),这些绑定抽象了一些冗余的工作并有助于防止某些类别的错误。 |
| 28 | + |
| 29 | +## 电子书 |
| 30 | + |
| 31 | +如果您更喜欢以电子书的形式阅读本教程,则可以在此处下载 EPUB 或 PDF 版本: |
| 32 | + |
| 33 | +* [EPUB](https://raw.githubusercontent.com/Overv/VulkanTutorial/master/ebook/Vulkan%20Tutorial%20ch.epub) |
| 34 | +* [PDF](https://raw.githubusercontent.com/Overv/VulkanTutorial/master/ebook/Vulkan%20Tutorial%20ch.pdf) |
| 35 | + |
| 36 | +## 教程概述 |
| 37 | + |
| 38 | +我们将通过一个实例概述 Vulkan 的工作原理。实例很简单,在屏幕画一个三角形。 在您了解了它们在整个绘画中的基本作用之后,所有较小步骤的目的将更有意义。 接下来,我们将使用 [Vulkan SDK](https://lunarg.com/vulkan-sdk/)、[GLM 库](http://glm.g-truc.net/) 设置开发环境用于线性代数运算,[GLFW](http://www.glfw.org/) 用于创建窗口。 本教程将介绍如何在 Windows 上使用 Visual Studio 和在 Ubuntu Linux 上使用 GCC 进行项目配置。 |
| 39 | + |
| 40 | +之后,我们将实现 Vulkan 程序的所有基本组件来渲染第一个三角形。 每一章将大致遵循 |
| 41 | +以下结构: |
| 42 | +* 介绍一个新概念及其目的 |
| 43 | +* 使用相关概念的 API 调用将其集成到您的程序中 |
| 44 | +* 将抽象的组织逻辑用函数封装 |
| 45 | + |
| 46 | +尽管每一章都是作为前一章的后续内容编写的,但也可以将这些章节作为介绍某个 Vulkan 功能的独立文章阅读。 这意味着该站点也可用作参考。 所有 Vulkan 函数和类型都与规范相关联,因此您可以单击它们以了解更多信息。 Vulkan 是一个非常新的 API,因此规范本身可能存在一些不足之处。 我们鼓励您提交反馈到[Khronos组织](https://github.com/KhronosGroup/Vulkan-Docs)。 |
| 47 | + |
| 48 | +如前所述,Vulkan API 有一个相当冗长的 API,其中包含许多参数,可让您最大限度地控制图形硬件。 这会导致诸如创建纹理之类的基本操作需要执行很多步骤,而这些步骤每次都必须重复。因此,我们将在整个教程中创建自己的简化函数集合。 |
| 49 | + |
| 50 | +每章的结尾都将附有一个指向该点之前的完整代码列表的链接。如果您对代码的结构有任何疑问,或者您正在处理一个错误并想要进行比较,您可以参考它。所有代码文件都已在多家供应商的显卡上进行了测试,以验证其正确性。每章末尾还有一个评论部分,您可以在其中提出与特定主题相关的任何问题。请反馈您的平台、驱动程序版本、源代码、预期状态和实际状态以 |
| 51 | +便我们能帮助到你。 |
| 52 | + |
| 53 | +本教程旨在为开源社区做出贡献。 Vulkan 仍然是一个非常新的 API,还没有真正建立最佳实践。 如果您对教程和网站本身有任何类型的反馈,请不要犹豫,向 [GitHub 存储库](https://github.com/Overv/VulkanTutorial) 提交问题或拉取请求。您可以 * 观看 * 存储库以收到教程更新的通知。 |
| 54 | + |
| 55 | +在你完成了绘制你的第一个基于Vulkan的屏幕三角形,我们将开始扩展程序内容,包括线性变换、纹理和 3D 模型。 |
| 56 | + |
| 57 | +如果您以前使用过图形 API,那么您应该知道在第一个几何图形出现在屏幕上之前可能需要执行很多步骤。 Vulkan 中有许多这样的初始步骤,但您会发现每个单独的步骤都很容易理解并且不会觉得多余。 同样重要的是要记住,一旦你有了那个看起来很无聊的三角形,绘制带有完整纹理的 3D 模型并不需要额外的工作,其中的每一步都更具有意义。 |
| 58 | + |
| 59 | +如果您在学习本教程时遇到任何问题,请先查看常见问题解答,看看您的问题及其解决方案是否已在此处列出。 如果您在那之后仍然卡住,请随时在最接近的相关章节的评论部分寻求帮助。 |
| 60 | + |
| 61 | +准备好深入了解高性能图形 API 的未来了吗?[开始吧!](!ch/Overview) |
0 commit comments