Introduction
2024年2月14日 2024年2月14日
Khronos Vulkan Tutorial - Introduction
在程序中从零开始设置图形API所需的所有细节, 包括创建初始帧缓存 initial frame buffer creation
, 缓冲区和纹理图片的内存管理
如果专注于游戏开发, 而不是图形学, OpenGL
和 Direct3D
是优于 Vulkan
的选择, 其他可选项包括 Unreal Engine
和 Unity
学习本教程需要满足以下要求
- 支持
Vulkan
的设备和驱动 - 会C++
- 熟知
RAII
机制
Resource Acquisition Is Initialization
- 熟知
initializer lists
- 熟知
- 支持
C++ 17
的编译器 - 有图形学开发的相关经验
OpenGL
或Direct 3D
本课程不会用到 OpenGL
和 Direct3D
的概念, 但需要读者了解基础的3D计算机图形学. 比如, 我们不会解释投影视图的数学原理.
参考资料 | |
---|---|
Learning Modern 3D Graphics Programming | 学习现代3D图形学编程 |
Ray tracing in one weekend | 一周学会光线跟踪 |
Physically Based Rendering book | 基于物理的渲染 |
使用Vulkan的开源引擎
- |
---|
Quake |
vkDOOM3 |
为了让使用其他编程语言的开发者更易上手, 以及有一定基础API的经验, 本教程会使用最初的 C
接口
使用 C++
的开发者可以使用
Vulkan-Hpp
, 其提供了 C++ bindings
1#include <vulkan/vulkan.hpp>
/Users/<用户名>/VulkanSDK/1.3.275.0/macOS/include/vulkan/vulkan.hpp
使用C而不是C++
- 自行寻找可使用的线性代数库
- 自行规划代码架构
本教程会用到以下 C++
特性:
- 类
组织逻辑 RAII
机制
管理资源的生命周期
使用Rust
教程提供Rust版
环境
- Vulkan SDK
- GLM库
线性代数库 - GLFW
创建窗口
章节结构
-
引入概念, 讲解意图
-
在程序中调用相关API
-
从概念抽象出组成部分, 创建帮助
helper
函数进行整合
比如读取纹理.Vulkan
允许我们最大化控制图形硬件, 相对应地, 比如读取纹理时, 每一步骤都需由我们给出, 且在每次读取纹理时重复我们可能需要创建帮助函数集合, 在需要时使用