Skip to content

Commit c16cea1

Browse files
committed
Improve 0000-0120
1 parent 15365b5 commit c16cea1

16 files changed

+88
-346
lines changed
Loading

docs/images/0121/normalized_device_coordinates.svg

Lines changed: 0 additions & 219 deletions
This file was deleted.

docs/index.md

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,7 @@
66

77
教程将使用 C++ 编写代码,借助 Vulkan-Hpp 封装,充分利用 RAII 等现代 C++ 特性,减少手动资源管理。
88

9-
> 注:Vulkan-Hpp 是 Vulkan SDK 的官方组成部分,非第三方库
10-
11-
**教程主要内容如下:**
12-
13-
1. 介绍基础概念
14-
2. 配置开发环境
15-
3. 绘制第一个三角形
16-
4. 扩展基础功能
17-
5. 介绍进阶功能
18-
9+
> 注:Vulkan-Hpp 是 Vulkan SDK 的官方组成部分,非第三方库。
1910
> 如果你发现了文档的错误,请点击右上角前往Github仓库,提交 Issue 或 PR 。
2011
2112
## **代码说明**
@@ -27,14 +18,8 @@
2718
- [GLFW](http://www.glfw.org/) 窗口库
2819
- [CMake](https://cmake.org/) 构建系统
2920
- [vcpkg](https://vcpkg.io/) 依赖管理
30-
- [stb_image](https://github.com/nothings/stb) 读取纹理图像(可选)
31-
- [tinyobjloader](https://github.com/tinyobjloader/tinyobjloader) 加载OBJ模型文件(可选)
32-
33-
正如教程名,我们会使用 Vulkan SDK 为C++提供的 `vulkan-hpp``raii` 封装,它提供了更现代的C++接口。
34-
35-
虽然 `vulkan-hpp` 支持 C++20 模块,但 `glfw3` 等库的模块化较为复杂,本教程暂不启用模块功能。
3621

37-
> 在最后的扩展或进阶章节中可能会尝试启用模块
22+
虽然 `vulkan-hpp` 支持 C++20 模块,但 `glfw3` 等库的模块化较为复杂,本教程在基础部分不启用模块功能。
3823

3924
`CMake` 用于项目构建,实现跨平台的项目配置,要求读者了解 CMake 的基础使用。
4025

docs/md/00/00_intro.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### Vulkan 是什么
66

7-
Vulkan 是 [Khronos Group](https://www.khronos.org/) 推出的**现代图形与计算 API**。与传统 API (如[OpenGL](https://en.wikipedia.org/wiki/OpenGL)[Direct3D](https://en.wikipedia.org/wiki/Direct3D))相比,它为显卡提供了更好的抽象,使你可以更好的描述应用程序的行为,从而减少意外的驱动程序行为并带来更好的性能。
7+
**[Vulkan](https://www.vulkan.org/)**[Khronos Group](https://www.khronos.org/) 推出的**现代图形与计算 API**。与传统 API (如[OpenGL](https://en.wikipedia.org/wiki/OpenGL)[Direct3D](https://en.wikipedia.org/wiki/Direct3D))相比,它为显卡提供了更好的抽象,使你可以更好的描述应用程序的行为,从而减少意外的驱动程序行为并带来更好的性能。
88

99
### 与传统 API 的关键差异
1010

@@ -15,15 +15,15 @@ Vulkan 是 [Khronos Group](https://www.khronos.org/) 推出的**现代图形与
1515
| 着色器编译 | 运行时GLSL编译 | 预编译SPIR-V字节码 |
1616
| 内存管理 | 驱动自动分配 | 开发者控制内存类型 |
1717

18-
这些优势的代价是开发者必须显式管理更多细节,从零开始配置所有内容,因此需要编写更多代码以确保行为正确
18+
这些优势的代价是开发者必须显式管理更多细节,**需要编写更多代码**以确保行为正确
1919

2020
## **什么人适合 Vulkan**
2121

2222
Vulkan 并不适合所有人,它针对的是热衷于高性能计算机图形学并愿意投入一些工作的程序员。
2323

2424
如果您主要对游戏开发感兴趣,那么 OpenGL 或 Direct3D 可能更适合您,因为它们的上手难度相对较低,且在多数场景下仍然能够满足需求。
2525

26-
另一种选择是使用 [Unreal Engine](https://en.wikipedia.org/wiki/Unreal_Engine#Unreal_Engine_4)[Unity](https://en.wikipedia.org/wiki/Unity_(game_engine)) 这样的游戏引擎。这些引擎可以利用 Vulkan 的高性能特性,同时为开发者提供更易用的高级 API,从而在不牺牲太多性能的前提下显著降低开发难度。
26+
另一种选择是使用 [Unreal Engine](https://www.unrealengine.com/zh-CN)[Unity](https://unity.com/cn) 这样的游戏引擎。这些引擎可以利用 Vulkan 的高性能特性,同时为开发者提供更易用的高级 API,从而在不牺牲太多性能的前提下显著降低开发难度。
2727

2828
## **学习前提**
2929

@@ -76,17 +76,17 @@ Vulkan 是 [Khronos Group](https://www.khronos.org/) 推出的**现代图形与
7676

7777
10. 不同的纸可能有不同的材质和大小,所以我们需要给每个纸写一个标签。这个标签就是图像视图 `VkImageView` ,描述图像的基本信息。
7878

79-
11. 现在机器人终于可以画画了,我们要为他准备一个画桌,用于放置画纸等工具。这个画桌就是帧缓冲 `VkFrameBuffer`一帧代指一副图像
79+
11. 现在机器人终于可以画画了,我们要为他准备一个画桌,用于放置画纸等工具。这个画桌就是帧缓冲 `VkFrameBuffer`一帧代指一幅图像
8080

8181
12. 我们还要为机器人设计一个房子,这个房子代指渲染通道 `VkRenderPass`,而画笔等工具对应其中的附件 `Attachments`
8282

8383
13. 虽然这些附件放置\(绑定\)在画桌\(帧缓冲\)上,但我们需要为房子贴上告示牌,写明房子内有哪些附件,即附件描述 `AttachmentDesctiption`
8484

85-
13. 当画作变得更加复杂,我们可以在一个房子里放多个小房间,每个房间干不同的事情,这些小房间就是子通道 `VkSubpass`
85+
13. 机器人很笨,只能看着流程图画画,所以你需要在房间中放置一些流程图,可以是一张,也可以是多张。这个流程图就代指图形管线 `VkGraphicsPipeline`
8686

87-
14. 机器人很笨,只能看着流程图画画,所以你需要在房间中放置一些流程图,可以是一张,也可以是多张。这个流程图就是图形管线 `VkPipeline`
87+
14. 一个大房子分成多个小房间(可以只有一个),可以用不同的房间干不同的事,这些小房间就是子通道 `VkSubpass` ,通常一个子通道绑定一个图形管线
8888

89-
15. 我们有一份流程图的模版,只需要修改它的部分内容就可以变成新的流程图。其中某几个部分是可编程的,这里就用到了我们熟悉的着色器模块 `Shader Module`
89+
15. 我们有一份流程图的模版,只需要修改它的部分内容就可以变成新的流程图。其中某几个部分是可编程的,这里就用到了着色器模块 `Shader Module`
9090

9191
16. 这些机器人很呆,需要你写信告诉他该画画了,在哪个房子的哪些房间根据哪些流程图画画。这个信就是命令缓冲 `VkCommandBuffer`
9292

docs/md/00/01_env.md

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -87,25 +87,21 @@ vcpkg 安装参考 [官方文档](https://learn.microsoft.com/zh-cn/vcpkg/get_st
8787

8888
### GLFW
8989
Vulkan 本身是一个平台无关的 API,不包含用于创建窗口以显示渲染结果的工具。
90-
我们将使用 [GLFW](http://www.glfw.org/) 来创建窗口,它支持 Windows、Linux 和 MacOS,且和 Vulkan 有很好的集成。
90+
我们将使用 [GLFW](http://www.glfw.org/) 库来创建窗口,它支持 Windows、Linux 和 MacOS,且和 Vulkan 有很好的集成。
9191

9292
安装命令:
9393
```shell
9494
vcpkg install glfw3
9595
```
9696

9797
### GLM
98-
与 DirectX 12 不同,Vulkan 不包含用于线性代数运算的库。我们使用 GLM 线性代数库,它专为图形 API 设计,常用于 OpenGL。
98+
与 DirectX 12 不同,Vulkan 不包含用于线性代数运算的库。我们使用 [GLM](https://github.com/g-truc/glm) 线性代数库,它专为图形 API 设计,常用于 OpenGL。
9999

100100
安装命令:
101101
```shell
102102
vcpkg install glm
103103
```
104104

105-
### 其他
106-
107-
`stb``tinyobjloader` 等库将在后面的章节(需要的时候)安装。
108-
109105
## **项目初始化**
110106

111107
### 目录结构
@@ -221,33 +217,31 @@ cmake --build build
221217
运行:
222218
```shell
223219
# Windows
224-
build\Debug\HelloVulkan.exe
220+
build/Debug/HelloVulkan.exe
221+
#
222+
build/HelloVulkan.exe
225223

226224
# Linux/MacOS
227225
build/HelloVulkan
228226
```
229227

230-
预期结果:
228+
**预期结果:**
231229

232230
- 弹出空白窗口
233231
- 关闭窗口后,控制台输出支持的Vulkan扩展数量
234232

235233
### 关于CMake预设
236234

237-
**注意:CMake预设不是必须的,我们没有复杂的配置需求,你完全可以通过上面两行简单的CMake指令构建项目!**
235+
注意:**CMake预设不是必须的**,我们没有复杂的配置需求,你完全可以通过上面两行简单的CMake指令构建项目!
238236

239237
如果你喜欢使用 `CMakePresets.json` (它可以很好地和 CLion、VSCode、Visual Studio 配合),可以参考 **[这个](../../codes/00/01_env/CMakePresets.json)** 预设模板。
240238

241-
此预设模板使用 Ninja 作为生成器,提供了 MSVC/GNU/Clang 工具链的预设配置。但它未经过充分测试,不保证全平台可用。
239+
此预设模板使用 Ninja 作为生成器,提供了 MSVC/GNU/Clang 工具链的预设配置。
242240

243241
## **代码编辑器**
244242

245243
建议使用一个足够智能的编辑器。
246-
当你不确定某些函数的参数和它的含义时,可以右键函数并跳转到它的定义,从而查看函数参数列表。Visual Studio/VSCode/CLion都能提供此功能。
247-
248-
---
249-
250-
下面让我们了解一下 `vulkan.h``vulkan.hpp` 的差异!!
244+
当你不确定某些函数的参数和它的含义时,可以右键函数并跳转到它的定义并查看实现。Visual Studio / VSCode / CLion都能提供此功能。
251245

252246
---
253247

0 commit comments

Comments
 (0)