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.