我想在执行命中测试后将对象放置在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


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

最佳答案

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

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

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

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

关于ios - ARKit/ARHitTestResult中worldTransform和localTransform之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56365938/

10-16 10:10