Ch1-0 准备工作

下载所需的库

名称

描述

Vulkan SDK

GLM

用于OpenGL的数学库,也适用于Vulkan

GLFW

帮助你轻松创建窗口,获取键鼠输入

stb_image.h

用于读取贴图,支持bmp、tga、png、jpeg、hdr等常见格式

后两项可用其他库替代(比如在Windows上不用GLFW,自行创建一个Windows窗口以及surface)。

GLM也可以用其他数学库替代,如果你嫌它不够快的话。
但需注意,GLM同GLSL一样,默认使用列主矩阵,在矩阵乘以矢量时,采用后乘(矢量在乘号右侧),举例而言:

float4 vertex(...);
mat4 local_to_object(...);
mat4 object_to_world(...);
mat4 view(...);
mat4 proj(...);
float4 transformedVertex = proj * view * object_to_world * local_to_object * vertex;

而DirectXMath中使用行主矩阵,并且使用预乘(可以看出这更符合直觉):

XMVECTOR transformedVertex =
    XMVector4Transform(
        XMVector4Transform(
            XMVector4Transform(
                XMVector4Transform(vertex, local_to_object), object_to_world), view), proj);

此外不同数学库生成的投影矩阵,其对应的NDC坐标系也各不相同,在挑选数学库时需注意甄别。

下载并安装Vulkan SDK

根据你的系统选择最新的SDK,然后建议Windows下安装到默认目录。
https://vulkan.lunarg.com/sdk/home

Note

检查设备是否支持Vulkan
安装完Vulkan SDK后,你可以在VulkanSDK\版本号\Bin或者VulkanSDK\版本号\Bin32下找到一些exe文件。
运行其中的vkcube.exe,若是成功运行,看到了一个正在旋转的正方体,说明你的显卡支持Vulkan。
另外,你可以通过vulkaninfoSDK.exe来查看显卡的相关信息。

下载GLM

务必是最新的。从OpenGL过来的程序员们,不要使用几年前的版本!
https://github.com/g-truc/glm/releases

下载GLFW

根据你的系统选择相应的pre-compiled binaries:
https://www.glfw.org/download.html

下载stb_image.h

直接下载单个文件即可:
https://github.com/nothings/stb/blob/master/stb_image.h

配置项目

下面以Win10上的VisualStudio 2019或2022为例。
若你使用的是其他的IDE或文本编辑器,或开发环境是其他操作系统,其中各种差异请各位自行解决(可以参考Vulkan Tutorial)。
关于下文中32位的文件和目录,如果你没有在安装VulkanSDK时勾选这些文件,或不需要开发32位版本,请无视。

_images/ch1-0-1.png

1.打开VS2019或VS2022,创建一个空的C++解决方案。

2.在解决方案目录下(或项目目录,那么后文中的SolutionDir相应地变成ProjectDir),按你的命名习惯创建个用于存放外部依赖项的文件夹,我打算叫它Dependency

  • stb_image.h放在Dependency下。

  • 将glm压缩包内的glm/glm放在Dependency下。

  • Dependency中新建一个GLFW文件夹,将glfw-版本号.bin.WIN64压缩包内glfw-版本号.bin.WIN64(或32)/include文件夹解压到该文件夹中,新建文件夹叫lib_win64lib_win32,并在压缩包内找到相应的lib文件夹,将内容解压到刚刚新建的相应文件夹中。

  • Dependency中新建一个Vulkan文件夹,并依次新建IncludeLibLib32三个文件夹,从你VulkanSDK的安装目录下找到Include/vulkan(如果你的SDK版本较新,可能还需要Include/vk_video)、Lib/vulkan-1.lbLib32/vulkan-1.lib,分别复制到上述三个文件夹。

因为我尽量不想更改压缩包内原有的文件层级关系,所以出现了GLFW/include/GLFW这样的路径。
最后看上去应该如右图所示。

3.新建main.cpp(为了让项目属性里出现C++选项)。

4.在项目属性中做如下变更:

[所有配置, 所有平台]
C/C++ → 常规 → 附加包含目录
添加:
$(SolutionDir)Dependency;
$(SolutionDir)Dependency\Vulkan\Include;
$(SolutionDir)Dependency\glm;
$(SolutionDir)Dependency\GLFW\include;

[所有配置, 所有平台]
C/C++ → 语言 → C++语言标准
设置为:
预览 - 最新 C++ 工作草案中的功能 (/std:c++latest)

[所有配置, Win32]
链接器 → 常规 → 附加库目录
添加:
$(SolutionDir)Dependency\Vulkan\Lib32;
$(SolutionDir)Dependency\GLFW\lib_win32;
%(AdditionalLibraryDirectories)

[所有配置, Win64]
链接器 → 常规 → 附加库目录
添加:
$(SolutionDir)Dependency\Vulkan\Lib;
$(SolutionDir)Dependency\GLFW\lib_win64;
%(AdditionalLibraryDirectories)

//以下非必要,但是建议
[所有配置, 所有平台]
配置属性 → 常规 → 输出目录
设置为:
$(SolutionDir)$(ProjectName)_$(Platform)\$(Configuration)\
[所有配置, 所有平台]
配置属性 → 常规 → 中间目录
设置为:
$(SolutionDir)bin\$(ProjectName)_$(Platform)\$(Configuration)\
//带有"$(ProjectName)_"是考虑到可能有在一个解决方案下创建多个项目的必要

至此为止项目就配置完了。