透视矩阵自3D游戏诞生以来就一直在幕后发挥作用,绝大多数向量库都有内置的辅助函数来帮助构造这些矩阵。但是,如果你想了解这些矩阵是如何构造的背后原理呢?
我将首先简要介绍计算机图形学以及3D渲染的核心概念。然后,我将区分图像顺序光栅化(通常用于光线追踪)和物体顺序光栅化(通常用于大多数视频游戏)。接着,我将展示一个动画演示,全面推导正交投影矩阵和透视投影矩阵的构造过程。
我的推导侧重于Vulkan API,但这一推理同样适用于其他API,如OpenGL或DirectX,唯一显著的区别在于标准视图体积的大小,以及XYZ坐标系的手性和约定。
0:00 3D图形是如何工作的?
2:05 图像顺序渲染与物体顺序渲染
2:51 正交投影矩阵
5:17 透视变换
7:08 齐次坐标除法
8:27 构造透视矩阵
10:29 非线性z深度与z冲突
11:30 透视投影变换
有用的资源
Fundamentals of Computer Graphics by Peter Shirley & Steve Marschner
https://www.songho.ca/opengl/gl_projectionmatrix.html
https://matthewwellings.com/blog/the-new-vulkan-coordinate-system/
https://www.businessinsider.com/pixars-animation-evolved-toy-story-2019-6