gpt4 book ai didi

ios - 如何将相机外部矩阵转换为 SCNCamera 位置和旋转

转载 作者:可可西里 更新时间:2023-11-01 06:24:13 25 4
gpt4 key购买 nike

我正在尝试使用 SceneKit 实现增强现实。

我使用 ARuco(OpenCV 增强现实库)通过估计标记的姿态获得了一个内在相机矩阵和一个外在矩阵。

然后我使用内在矩阵(fovy、aspect、zNear、zFar)的参数设置了 SCNCameraprojectionTransform

通常在OpenGL中,相对于相机坐标的世界坐标是用ModelView计算的,但在SceneKit中,没有modelView之类的东西。

所以我计算了外部矩阵的逆矩阵以获得相对于世界坐标的相机坐标(标记坐标)。

而且我认为我已经通过包含旋转和平移矩阵的逆矩阵获得了正确的相机位置。

但是我无法从中获取相机的旋转

你有什么想法吗?

最佳答案

SceneKit 具有与您在 OpenGL 中遇到的相同的 View 矩阵,在您开始使用着色器之前它们只是隐藏了一点。 IMO 有点太隐蔽了。

您似乎已经解决了大部分问题。投影矩阵来自您的相机 projectionTransform,而 View 矩阵来自相机矩阵的逆矩阵 SCNMatrix4Invert(cameraNode.transform)。在我的例子中,一切都在世界坐标中,使我的模型矩阵成为一个简单的单位矩阵。

我最终用来获取经典模型- View -投影矩阵的代码类似于...

let projection = camera.projectionTransform()
let view = SCNMatrix4Invert(cameraNode.transform)
let model = SCNMatrix4Identity

let viewProjection = SCNMatrix4Mult(view, projection)
let modelViewProjection = SCNMatrix4Mult(model, viewProjection)

出于某种原因,我发现 SCNMatrix4Mult(...) 接受参数的顺序与我预期的不同(例如,与 GLKMatrix4Multiply(...) 相反) .

我对此还不是 100%,所以欢迎编辑/提示。使用这种方法,我无法获得 SceneKit MVP 矩阵(传递给着色器)以匹配上面代码计算的矩阵......但它已经足够接近我需要的了。

关于ios - 如何将相机外部矩阵转换为 SCNCamera 位置和旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33730468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com