GLKView GLKMatrix4MakeLookAt描述和解释

Pra*_*lan 1 opengl objective-c matrix glkview

对于modelviewMatrix,我了解如何形成转换和缩放Matrix。但是我无法理解如何使用来形成viewMatrix GLKMatrix4MakeLookAt。谁能解释它的工作原理以及如何给参数赋值(眼睛中心向上XYZ)。

GLK_INLINE GLKMatrix4 GLKMatrix4MakeLookAt(float eyeX, float eyeY, float eyeZ,
                                                  float centerX, float centerY, float centerZ,
                                                  float upX, float upY, float upZ)
Run Code Online (Sandbox Code Playgroud)

rad*_*al7 5

GLKMatrix4MakeLookAt创建一个查看矩阵(与gluLookAt查看其他OpenGL代码的方式相同)。正如参数所建议的那样,它考虑了观看者眼睛的位置,观看者正在观看的空间中的点(例如,物体上的点)以及向上向量,该向量指定了哪个方向为“向上”(例如,指向向天空)。生成的查看矩阵是旋转矩阵(由一组正交基[基本向量]组成)和平移的组合。

从逻辑上讲,矩阵基本上是由几个步骤构成的:

  1. 计算行的视线向量,这是从眼睛的位置,你看,该点去了法矢中心点。
  2. 计算视线向量向量的叉积,并对所得向量进行归一化。
  3. 计算在步骤2中计算出的向量的叉积和视线以完成正交法线基础。
  4. 通过将第一行设置为在步骤2中创建的矢量,将中间行设置为来自步骤3的矢量,并将底部行设置为取反后的标准化视线矢量,来创建3x3旋转矩阵。

这三个步骤将产生一个旋转矩阵,该旋转矩阵会将世界坐标系统旋转为眼睛坐标(眼睛位于原点且视线位于-z轴的坐标系统。计算最终视图矩阵)通过将平移倍增到否定的眼睛位置,将“世界坐标定位的眼睛”移动到眼睛坐标的原点。

这是一个显示的代码的相关问题GLKMatrix4MakeLookAt,这是一个有关眼睛坐标和相关坐标系的更详细的问题:(什么是眼睛空间坐标?)。