GLKView GLKMatrix4MakeLookAt描述和解释

时间:2013-12-17 13:21:31

标签: objective-c opengl matrix glkview

对于modelviewMatrix,我了解如何形成翻译和缩放矩阵。但我无法理解如何使用GLKMatrix4MakeLookAt形成viewMatrix。任何人都可以解释它是如何工作的以及如何给参数赋值(眼睛中心向上X Y Z)。

GLK_INLINE GLKMatrix4 GLKMatrix4MakeLookAt(float eyeX, float eyeY, float eyeZ,
                                                  float centerX, float centerY, float centerZ,
                                                  float upX, float upY, float upZ)

1 个答案:

答案 0 :(得分:4)

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

逻辑上,矩阵基本上只需几步构建:

  1. 计算视线矢量,这是从眼睛的位置到您正在观察的点的标准化矢量,中心点。
  2. 使用向上向量计算视线向量的叉积,并对结果向量进行归一化。
  3. 计算步骤2中计算的向量与视线的叉积,以完成标准正交基础。
  4. 通过将第一行设置为在步骤2中创建的向量来创建3x3旋转矩阵,中间行使用步骤3中的向量,并将底行添加到否定的,标准化的视线 vector。
  5. 这三个步骤产生一个旋转矩阵,将世界坐标系旋转到眼睛坐标(眼睛位于原点的坐标系,视线在-z轴下方。最后观察矩阵是通过将平移乘以负眼位置来计算的,该位置将“世界坐标定位眼”移动到眼坐标的原点。

    以下是显示GLKMatrix4MakeLookAt代码的相关问题,这是一个关于眼睛坐标和相关坐标系的详细问题:(What exactly are eye space coordinates?)。