首页

简介

EasyVulkan是一个面向懒人的Vulkan中文教程系列,旨在帮助Vulkan学习者轻松入门,避免踩坑(所谓的面向懒人就是指我帮你把坑先踩了)。
这套教程使用有条理的面向对象编程,或者说,通过对Vulkan中的各种对象和过程进行封装,提高代码复用率,避免过于冗长的代码,以期降低学习难度。
学习这套教程前,你需要自备C++基础及高中程度的数学及英语知识。

这不是技术美术教程,也不是计算机图形学教程。

示例代码见我的Github。直接上的解决方案(VS2022,Win10)。
左侧搜索功能仅支持英文关键词。

Why Vulkan?

Vulkan是一个较为底层的图形API,底层一词意味着它难学,但又能提供比诸如OpenGL、DirectX11等高级图形API更出众的性能(但也不可一概而论,在一些简单的场景中高级图形API可能会跑出更高的效率)。
Vulkan相比现有的其他偏底层的图形API(Windows专用的DirectX12、苹果系OS专用的Metal),其代码有着能跨平台编译的优势,但并不保证Vulkan程序总是能与用平台特定图形API写的程序性能相当(尽管这一差距可以非常小或没有差别)。

用Vulkan能干什么?
搞渲染,比如开发渲染引擎、开发GUI等。
用Vulkan能做游戏吗?
能!只不过你要造一整套渲染引擎的轮子,啃一堆微积分和线性代数式子,做一系列其他纷繁复杂的编程。

目录

前两章是Step By Step入门教程,很长,初学者请耐心看完。
然后直接阅读Ch6和Ch7(建议先七后六),按要求阅读Ch3~5。

第四章 着色器

第八章 简单示例

更新履历

  • 25.08.27 修改代码,给deviceMemory及其衍生类的构造器添加了flags参数,添加了一些教程中没有的辅助类等(因此教程中的代码跟solution中的代码可能有所区别,尤其是目前Ch8的VKBase.hVKBase+.h相对而言较为接近我个人使用的版本)。


  • 25.08.27 修改一些用词(比如将“normalized”译为“归一化”,比“标准化”更直观,“NDC”一词仍译作标准化设备坐标系)。


  • 25.08.27 一如既往改正一些笔误、复制粘贴错误,比如Ch4-2 顶点着色器中:
    误:对于索引绘制命令,...,gl_VertexIndex为命令缓冲区中与firstIndex相应的索引值加上vertexOffset。
    正:对于索引绘制命令,...,gl_VertexIndex为索引缓冲区中与firstIndex相应的索引值加上vertexOffset。
    感觉每次读自己写的东西都有类似的新发现呐!...


  • 25.08.11 Ch1-4中更改了RecreateDevice(...)函数中if (device)的位置(原先被我写在了WaitIdle()后,真是秀逗了)。


  • 25.08.11 在Ch3-6的描述符类型一小节中漏了在计算着色器之外写入storage图像/纹素缓冲区的说明,补上。


  • 25.08.11 优化一些叙述,修正一些复制粘贴错误、忘记修改的残余文本,更新代码着色(仍在施工中,代码和正文中函数参数全部高亮;正文中全局、局部、静态成员变量采用阴影,成员变量一概取消高亮)。


  • 更早的更新履历见Ex 更新履历

关于转载和联系方式

暂请不要转载原文,在写完前述各章节前可能会不断修改细节。
也不要fork成公有仓库(包括到Gitee/GitCode的情況)。

联系请:
1.捉虫/答疑,发Issue,开新的,或者发在issue#7
2.反馈/交流/答疑,发Discussion。
3.本页面底下的留言板可发表简短留言,我如果知道该怎么回复的话会回复
(该留言板对应issue#10,发言须有Github账号+建议科学上网)。

欢迎以下形式的捉虫:
1.解释错误或代码逻辑错误
2.前言不搭后语
3.突然冒出毫无解释的代码
4.妨碍理解的错别字、多字漏字
5.链接失效