代码之家  ›  专栏  ›  技术社区  ›  Henry

ARKit-相对于世界原点定位世界中的节点

  •  1
  • Henry  · 技术社区  · 7 年前

    目前,我的代码加载到三维模型中,使用该模型创建节点,并在场景中显示节点。设置节点的缩放/旋转(euler角度)效果良好。但是,我正在尝试设置节点相对于世界原点的位置,我不希望节点附着到平面。

    我试过设置 节点。位置 节点。世界地位 无济于事;虽然节点的位置会更改,但当摄影机移动时,节点不会保持静止,而是随摄影机移动。我对使用ARKit还不熟悉,所以我可能在做一些愚蠢的事情,但我不知道我需要做什么,所以非常感谢您的帮助。

    编辑: 奇怪的是,如果我将坐标设置为SCNVector3(0,3,0),这很好,但如果我超过一定数量的米,它似乎失败了。这是预期的吗

    1 回复  |  直到 7 年前
        1
  •  1
  •   Clay    7 年前

    首先,这些共同问题可能导致世界跟踪不佳。

    1. 可怜的ligthing。 导致可用于跟踪的要素点数量较少

    2. 缺少纹理 导致可用于跟踪的要素点数量较少

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

    然而,我认为在您的案例中发生了什么(调试起来有点棘手)。。。很可能是将加载的模型放置在场景中检测到的水平面下方。

    换言之,您可能已经使用负Y坐标定位了SCNNode,该坐标将节点放置在水平检测平面下方,并导致模型在更改摄影机视图时四处漂移

    尝试将节点的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米处。

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