目录
很多人学习计算机图形学时首先尝试的都是OpenGL,因为其API比较简单。但是其底层已经相对比较落后。在进一步的学习中,vulkan(下面简称vk)是一定会接触到的东西。vk是OpenGL的开发团队针对新的硬件架构开发的新的跨平台图形API,适合高性能渲染。从这篇文章开始我将开始vk的学习,并且争取以最喂饭的方式讲解vk的学习路径,从而让不熟悉OpenGL的开发者也能上手vk。
注意:不熟悉OpenGL不代表0基础,如果你完全不懂得图形学的话上手vk还是地狱难度的。因此建议先补充必要的图形学知识。这里推荐网上搜索图形学虎书或者B站搜索GAMES101.
下载vk
下载vk的方式较为简单,只需要在vk官网下载最新的SDK安装即可:
Vulkan 1.3.283.0 SDK Now Available | Vulkan | Cross platform 3D Graphics
安装完之后直接找到Demos文件夹打开Visual Studio解决方案(没有VS建议下载一个)打开运行,会弹出来一个旋转的方块,像这样:
这就说明你的vk环境是没有问题的。如果出现了报错,请检查你的显卡驱动并更新。
配置vk环境
- 操作系统:Windows11
- Visual Studio 2022
首先我们新建一个项目,并且新建一个.cpp文件加入该项目:
随后在main.cpp中输入以下测试代码:
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>
#include <iostream>
int main()
{
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);
uint32_t extensionCount = 0;
vkEnumerateInstanceExtensionProperties(nullptr,
&extensionCount, nullptr);
std::cout << extensionCount << "extensions supported"
<< std::endl;
glm::mat4 matrix;
glm::vec4 vec;
auto test = matrix * vec;
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
接下来我们配置Visual Studio:
打开解决方案属性,找到C/C++-附加包含目录:
这里直接把所有需要的文件放到了一个和解决方案同级的文件夹下:
你的include应该至少包含GLFW和vk的包含文件,如下所示:
其中,GLFW文件夹可以在下载的vk文件夹的glfw-3.4.bin.WIN64\glfw-3.4.bin.WIN64\include找到,其余可以在vk文件夹的Include找到。
接下来看到链接器-常规-附加库目录属性:
其中前者可以在vk文件夹的Lib找到,后者可以在vk文件夹的glfw-3.4.bin.WIN64\glfw-3.4.bin.WIN64\lib-vc2022找到。
最后看到链接器-输入-附加依赖项属性:
直接输入即可。
配置完属性后直接运行,如果没有路径错误一般都可以成功,出现一个黑框框和全白的图形窗口:
如果报错,说明前面配置属性的路径有问题,或者你的vk没有装好。另外还需要注意的是,上面的属性都需要在“所有配置“条件下更改,运行请使用x64运行。
为什么没有第一个程序?
本文为什么不直接讲如何渲染一个简单图形?原因是vk针对现代图形流水线做了很多封装。完成了环境配置距离渲染一个图形还有很长的距离。
事实上,本文很大程度上参考了Introduction - Vulkan Tutorial的官方教程。由于官网的教程是全英文的,这里提供一个翻译之后的资源。这个资源比较新(2024年的),所以一般照着做都没有什么问题:
链接:https://pan.baidu.com/s/1cQSawir32j5VLQl2ZcI5Aw
提取码:vkvk
本文相比官方教程好在哪里?
本文相比官方教程更加亲民(面向真正小白,因为作者就是vk小白),可能讲的更加直观容易理解(免去了你问AI的时间),争取完美还原你读源码的心路历程。欢迎关注追更!