摄像机相当于观察者的眼睛,观察者的移动可以看到不同位置的场景,但OpenGL只能移动场景。OpenGL没有摄像机的概念,但可以通过把场景中的所有物体向相反方向移动的方式模拟摄像机。
摄像机/观察空间
当我们讨论摄像机/观察空间(Camera/View Space)的时候,是我们在讨论以摄像机的透视图作为场景原点时场景中所有可见顶点坐标。
观察矩阵把所有的世界坐标变换到观察坐标,这些新坐标是相对于摄像机的位置和方向的。定义一个摄像机,我们需要一个摄像机在世界空间中的位置、观察的方向、一个指向它的右测的向量以及一个指向它上方的向量。细心的读者可能已经注意到我们实际上创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系。OpenGL的+Z轴是指向窗口向外的。
上图说明:
1,摄像机的位置:点(0, 0, 2)
2,摄像机的方向:表示摄像机的+Z,为向量(0, 0, 2),与摄像机观察时的视线正好相反
3,右轴:表示摄像机的+X。定义一个单位向量(0, 1, 0),由摄像机的方向向量和此向量叉乘可得右轴向量。
4,上轴:表示摄像机的+Y,将方向轴和右轴向量叉乘可得。
Look At 矩阵
定义一个矩阵,将世界坐标变换为观察坐标
R为右轴向量,U为上轴向量,D为方向轴向量,P为摄像机位置向量。位置向量分量前加‘-’,是由于摄像机观察视线方向和其方向轴是相反的,比如当世界坐标(0, 0, 0)转换到摄像机空间时是(-Px, -Py, -Pz)。
欧拉角
欧拉角(Euler Angle)是表示3D空间中可以表示任何旋转的三个值。有三种欧拉角:俯仰角(Pitch)、偏航角(Yaw)和滚转角(Roll),下面的图片展示了它们的含义:
图片和一些文字来源于https://learnopengl-cn.github.io,本人收集作为笔记,如有侵权,望告知