Diferencia de matriz de perspectiva GLKit vs. Metal

Estoy leyendo un metaltutorial en raywenderlich.com, donde presenta un puro Swift float4x4clase auxiliar. 99% es solo envoltorio alrededor de las funciones GLKit, excepto una función que realmente me desconcierta:

  static func makePerspectiveViewAngle(_ fovyRadians: Float, aspectRatio: Float, nearZ: Float, farZ: Float) -> float4x4 {
    var q = unsafeBitCast(GLKMatrix4MakePerspective(fovyRadians, aspectRatio, nearZ, farZ), to: float4x4.self)
    let zs = farZ / (nearZ - farZ)
    q[2][2] = zs
    q[3][2] = zs * nearZ
    return q
  }

¿Por qué necesita cambiar?q[2][2] yq[3][2]. ¿Es esto alguna incompatibilidad entre el sistema de coordenadas de Metal y GLKit?

¿Es esta una elección particular que hizo este tutorial? Si no es así, ¿hay alguna otra incompatibilidad entre GLKit y Metal Math?

Actualizar: Encontré una buena ilustración sobre el sistema de coordenadas del espacio de clip de Metal de la Sesión de la WWDC 2016: Adoptando Metal I.

Respuestas a la pregunta(1)

Su respuesta a la pregunta