一:概述
我们的程序现在可以加载和渲染 3D 模型了。在本章中,我们将再添加一项功能-- Mipmaps 生成。Mipmaps 广泛应用于游戏和渲染软件中,Vulkan 让我们可以完全控制 Mpmaps 的生成方式。
Mipmaps 是预先计算的、缩放的图像。每个新图像的宽度和高度都是前一个图像的一半。Mipmaps 是一种细节层次(Level of Detail)或 LOD 的形式。距离摄像机较远的物体将从较小的 mip 图像中获取纹理样本。使用较小的图像可以提高渲染速度,避免出现摩尔纹等人工痕迹。Mipmaps 示例如下图:
二:创建图像
在 Vulkan 中,每个 mip 图像都存储在 VkImage 的不同 mip 层中。mip 级别 0 是原始图像,级别 0 之后的 mip 级别通常称为 mip 链。
mip 级别的数量在创建 VkImage 时指定。到目前为止,我们一直将该值设置为 1。我们需要根据图像的尺寸计算 mip 层数。首先,添加一个类成员来存储这个数字:
...
uint32_t mipLevels;
VkImage textureImage;
...
在 createTextureImage 中加载纹理后,就可以找到 mipLevels 的值:
int texWidth, texHeight, texChannels;
stbi_uc* p