ARKit - 将世界上相对于世界的节点定位

时间:2017-12-22 09:01:56

标签: ios arkit scnnode

目前,我的代码加载到3D模型中,使用该模型创建节点,并在场景中显示节点。设置节点的比例/旋转(euler角度)可以正常工作。但是,我正在尝试设置节点相对于世界原点的位置,我不希望节点连接到平面。

我尝试将 node.position node.worldPosition 设置为无效;虽然节点的位置发生变化,但是当摄像机移动时,节点不会保持静止,而是随着摄像机移动。我刚开始使用ARKit,所以我可能做了一些愚蠢的事情,但我无法弄清楚我需要做什么,所以任何帮助都会非常感激。

编辑: 奇怪的是,如果我将坐标设置为说SCNVector3(0,3,0)就可以了,但是如果我超过一定数量的距离它似乎失败了。这是预期的

1 个答案:

答案 0 :(得分:0)

首先,这些常见问题可能导致糟糕的世界追踪。

  1. 不良光线。导致可用于跟踪的特征点数量较少

  2. 缺乏纹理导致可用于跟踪的特征点数量较少

  3. 快速移动导致图像模糊,导致跟踪失败

  4. 然而,我认为你的情况正在发生(调试有点棘手)......你最有可能将加载的模型放在场景中检测到的水平面下面。

    换句话说,您可能已使用负Y坐标定位SCNNode,该坐标将节点置于水平检测平面下方并导致模型在您更改cameraView时漂移

    尝试将节点的Y位置设置为0或小的正值,如0.1米

    node.position = SCNVector3(0, 0, -1)  // SceneKit/AR coordinates are in meters
    
    sceneView.scene.rootNode.addChildNode(node)
    

    z = -1将SCNNode 1米放在cameraView前面。

    注意:我自己使用我用于测试目的的游乐场验证了这个问题。