【发布时间】:2018-01-17 23:08:40
【问题描述】:
我正在 raywenderlich.com 上阅读 Metal tutorial,其中介绍了纯 Swift float4x4 helper class。 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 Session: Adopting Metal I 中找到了一个关于 Metal 剪辑空间坐标系的很好的插图。
【问题讨论】:
标签: swift opengl 3d metal glkit