Также есть хорошее визуальное объяснение из видео WWDC, добавившее его к моему вопросу.
аю металлруководство на raywenderlich.com, где он представляет чистый Swift float4x4вспомогательный класс, 99% - это просто обертка вокруг функций GLKit, кроме одной функции, которая меня действительно озадачивает:
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
}
Почему это нужно изменитьq[2][2]
а такжеq[3][2]
, Это какая-то несовместимость между системой координат Metal и GLKit?
Это конкретный выбор, сделанный в этом уроке? Если нет, есть ли какие-либо другие несовместимости между GLKit и Metal математикой?
Обновить: Я нашел хорошую иллюстрацию о системе координат пространства клипов Металла с сессии WWDC 2016: Внедрение Металла I.