ARKit-如何将其他库的转换矩阵转换为ARKit的转换矩阵

时间:2018-08-07 03:04:29

标签: ios swift transform matrix-multiplication arkit

我最近一直在从事有关ARKit的项目,而我遇到了这个问题。我正在使用另一个名为Chilitags(https://github.com/chili-epfl/chilitags)的库来检测QR码。我知道ARKit已经具有图像跟踪功能,但是我已经确认了它对跟踪多个QR码的效果不够准确。但是,此Chilitags库在跟踪多个QR码方面非常有效。问题是我仍然需要ARKit将虚拟对象放置在QR码上,这意味着我必须获取QR码的位置。该库的结果是4x4转换矩阵,但其规模与ARKit的库完全不同。例如:

我使用ARKit的图像跟踪来打印QR码的变换矩阵:

SCNMatrix4(
m11: 0.8879016, m12: 0.02834134, m13: 0.45915967, m14: 0.0, 
m21: -0.41666517, m22: 0.47259864, m23: 0.7765569, m24: 0.0, 
m31: -0.19498956, m32: -0.88082194, m33: 0.4314299, m34: 0.0, 
m41: 2.181344, m42: -6.071724, m43: -8.329311, m44: 1.0)

m41,m42和m43应该是翻译向量。同时,我从第三个库中打印了结果矩阵:

SCNMatrix4(
m11: -0.03814664, m12: 0.9991378, m13: -0.016384475, m14: 21.37618, 
m21: -0.9992703, m22: -0.038172737, m23: -0.0012827757, m24: 22.891714, 
m31: -0.00190711, m32: 0.016323587, m33: 0.99986494, m34: 29.677961, 
m41: 0.0, m42: 0.0, m43: 0.0, m44: 1.0)

m14,m24和m34应该是翻译向量。

因此,v1 =(2.181344,-6.071724,-8.329311)和v2 =(21.37618,22.891714,29.677961)的比例完全不同。我已经考虑过一个可能的解决方案:

来自ARKit的

v1是真实世界坐标系中原点节点的相对位置。来自第三个库的v2是摄像机的相对位置。因此,可能存在从v1到v2的映射,因为v2 = a * v1 + v0(a是一个常数,而v0是摄像机到原始节点的位置)。因此,我需要每帧获取相机的位置。我在stackoverflow中尝试了很多方法,但是摄像机位置的结果是(0,0,0),这显然是不对的。

那么您认为我可能的解决方案可行吗?如果有道理,如何获得每帧相机的位置?如果没有意义,是否还有其他解决方案可以将矩阵转换为ARKit的形式?感谢您阅读本文!

0 个答案:

没有答案
相关问题