• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在 ARKit 中获取相机的向上向量

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:25:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试在ARKit中获取构成截锥体边界的四个向量,我想出的解决方案如下:

  • 找出相机的视野角度
  • 然后找到相机的方向和向上向量
  • 使用这些信息,使用叉积和旋转找到四个向量

这可能是一种草率的做法,但它是迄今为止我得到的最好的方法。

我能够从 ARCamera.intrinsicsARCamera.transform 属性中获取 FOV 角度和方向矢量。但是,我现在不知道如何获取相机的向上向量。

下面是我用来查找 FOV 角度和方向矢量的一段代码:

func session(_ session: ARSession, didUpdate frame: ARFrame) {
  if xFovDegrees == nil || yFovDegrees == nil {
    let imageResolution = frame.camera.imageResolution
    let intrinsics = frame.camera.intrinsics
    xFovDegrees = 2 * atan(Float(imageResolution.width) / (2 * intrinsics[0,0])) * 180 / Float.pi
    yFovDegrees = 2 * atan(Float(imageResolution.height) / (2 * intrinsics[1,1])) * 180 / Float.pi
  }

  let cameraTransform = SCNMatrix4(frame.camera.transform)
  let cameraDirection = SCNVector3(-1 * cameraTransform.m31,
                                   -1 * cameraTransform.m32,
                                   -1 * cameraTransform.m33)
}

我也愿意接受有关如何找到我想要获得的四个向量的建议。



Best Answer-推荐答案


我不明白这条线是如何工作的:

let cameraDirection = SCNVector3(-1 * cameraTransform.m31,
                                 -1 * cameraTransform.m32,
                                 -1 * cameraTransform.m33)

这给出了相机的方向向量,因为变换矩阵的第 3 行给出了变换后的相机的新 z 方向指向的位置。我们将它乘以 -1,因为相机的默认方向是负 z 轴。

考虑到这些信息以及相机的默认向上向量是正 y 轴这一事实,变换矩阵的第 2 行为我们提供了相机的向上向量。下面的代码给了我我想要的:

let cameraUp = SCNVector3(cameraTransform.m21,
                          cameraTransform.m22,
                          cameraTransform.m23)

关于ios - 在 ARKit 中获取相机的向上向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719468/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap