首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLKit与金属透视矩阵的差异

GLKit与金属透视矩阵的差异
EN

Stack Overflow用户
提问于 2018-01-17 23:08:40
回答 1查看 1.7K关注 0票数 4

我正在阅读教程 on raywenderlich.com,其中介绍了一个纯Swift float4x4 帮助者类。99%的情况下,它只是GLKit函数的包装器,除了一个真正令我困惑的函数:

代码语言:javascript
复制
  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]。这是金属和GLKit坐标系之间的不相容吗?

这是本教程做出的特定选择吗?如果没有,GLKit和金属数学之间还有其他不相容之处吗?

更新:我在2016年会议上找到了一个关于金属剪辑空间坐标系的很好的说明:采用金属I。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 17:54:47

引用这个论坛问题

OpenGL使用与金属不同的剪辑空间坐标(在GL中,z从-1到1,而在Metal从0到1),所以使用GLKMatrix4MakePerspective不会给出一个从眼睛空间转换到剪辑空间的矩阵。相反,它会改变眼睛后面一半的观看量,有时会导致微妙的剪裁和剔除问题。通过将以下代码添加到makePerspectiveViewAngle中,您可以通过设置与深度相关的矩阵元素来修复从GLK返回的矩阵: 设zs = farZ / (nearZ - farZ) q2 = zs q3 = zs * nearZ

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48311452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档