前言
本教程翻译自Khronos Vulkan Tutorial,更准确的内容请阅读原文。
关于本教程
本教程主要介绍了Vulkan图形和计算 API的基础知识。Vulkan是Khronos组织(该组织以OpenGL闻名)发布的新一代图形API,它提供了对现代显卡更好的抽象,相比于OpenGL和Direct3D,Vulkan可以拥有更好的性能,更轻便的驱动程序行为。Vulkan在设计理念上类似于Direct3D 12和Metal,但与后两者相比,Vulkan是跨平台的,可以在Windows,Linux和Android平台上使用。
然而,Vulkan的这些好处是有代价的,Vulkan API更加冗长,图形 API 相关的每个细节需要应用程序精准设置。需要应用程序开发者做更多的工作以确保正确的行为,包括创建初始化使用的帧缓冲区,以及对缓冲区和纹理对像的内存管理。
Vulkan并非适合所有人,它是为追求高性能计算机图形性能的程序员设计的。如果你对游戏开发更感兴趣,或许OpenGL和Direct3D更适合,它们在短期内仍然会是主流。另外也可以使用Unreal Engine或Unity这些引擎,它们的底层已经封装好了Vulkan,你可以完全无感知地使用引擎接口。
下面是学习本教程的一些前提条件:
- 支持Vulkan的显卡以及驱动程序(NVIDIA,AMD,Intel)
- 具备C++编程经验(熟悉RAII,初始化列表)
- 支持C++的编译器(Visual Studio 2017+,GCC 7+)
- 具备3D计算机图形学基础(OpenGL 或 Direct3D)
本教程不要求读者了解OpenGL或Direct3D,但需要了解3D计算机图形学的基本知识。例如,透视投影背后的数学原理。
有关3D计算机图形学的基础知识,请阅读:
读者可以使用C来替换C++,但这样做需要对示例代码进行很多修改。示例代码使用了类,RAII等C++特性。
教程结构
我们首先介绍Vulkan的工作原理,然后介绍如何使用Vulkan绘制一个三角形显式在屏幕上。接下来,我们介绍如何使用Vulkan SDK、配置开发环境,我们引入了GLM数学库用于线性代数运算,GLFW库用于窗口的创建。教程还介绍了Windows上Visual Studio的配置方法,以及Ubuntu上使用GCC的配置方法。
之后,我们讲解使用Vulkan编写应用程序来绘制一个三角形的所有基本组件。每一章节大致遵循下面的结构:
- 介绍新概念和它的用途
- 将与之相关的API调用集成到我们的程序中
- 将相关代码封装成辅助函数
虽然章节的组织有一定顺序,但一些章节,可以作为介绍Vulkan特性功能的文章来独立阅读。因此,本教程也可以作为Vulkan的一个参考手册来查询。教程中所有的Vulkan函数和类型都链接到了Vulkan规范,可以通过点击鼠标获取更详细的信息。由于Vulkan是一个非常新的API,因此规范文档可能存在不足,读者可以给Khronos的Github仓库提交反馈。
之前提到,为了更精准地控制硬件,使用Vulkan需要处理大量细节。这导致很多基础操作(如创建纹理)也需要编写很多代码才能实现,我们会封装一些函数来避免重复这类操作。
每一章节的结尾会附上完整的代码链接,读者使用过程中有疑惑时可以参考这些代码。这些代码已经过多个不同厂商的显卡测试。
有关Vulkan的最佳实践尚未建立,如果您对本教程有任何疑惑和反馈,可以提交反馈到GitHub仓库KhronosGroup/Vulkan-Tutorial。
当读者实现使用Vulkan绘制第一个三角形的程序后,我们将开始扩展该程序,引入线性变换,纹理和3D模型。
如果读者之前使用过图形API,应该知道在几何体显示到屏幕之前,需要经过很多步骤。使用Vulkan同样如此,这些步骤很容易理解,每一步都不多余。 而且绘制3D模型的步骤并不比绘制三角形多太多额外的工作。
准备好体验高性能次世代图形API了吗?让我们开始吧!