ARKit / ARHitTestResult中worldTransform和localTransform之间的区别

时间:2019-05-29 17:41:22

标签: ios arkit hittest placement

我试图在执行一次命中测试后将对象放在AR中的特定位置,但有时使用worldTransform使其未对齐/旋转不正确。我试图将localTransform属性应用于worldTransform,因为这似乎可以确保无论拾取了哪个特征点,我都可以将对象转换到所需的位置。

我尝试将localTransform simd_4矩阵添加/减去worldTransform矩阵,但是看起来它实际上并没有做任何有意义的事情。

这是我实际应用转换的方式:

world.columns.3[0] += local.columns.3[0]
world.columns.3[1] += local.columns.3[1]
world.columns.3[2] += local.columns.3[2]
world.columns.3.w  = local.columns.3.w

我有一个自定义可视化程序,用于确定击中测试的位置,我希望它恰好是我点击的位置,但是在应用偏移之后,它似乎朝着随机的方向前进。

1 个答案:

答案 0 :(得分:0)

世界变换和局部变换之间的区别是: -世界变换是模型相对于场景位置的位置 -本地变换是模型相对于其父节点位置的位置

在您的情况下,我怀疑您不是将节点直接添加为根节点的子级,因为rootNode是场景中的(0,0,0)节点,其任何子级转换矩阵都应该相同。

按照您的逻辑,我将假设您投射的触摸不如设置SCNFloor那样设置无限平面,然后在该无限平面上检测触摸。尝试将触摸投射到ARSCN时,这将为您提供更准确的位置。

我建议您看一下Maxx Frazer的ARKit-SmartHitTest,因为这就是他如何实现此功能,并且他的代码是开源的。 https://github.com/maxxfrazer/ARKit-SmartHitTest/blob/master/SmartHitTest/SmartHitTest.swift