ARKit - 相对于世界原点在世界中定位一个节点

ARKit - positioning a node in the world relative to world origin

目前,我的代码加载了一个 3D 模型,使用该模型创建了一个节点,并在场景中显示了该节点。设置节点的 scale/rotation(欧拉角)工作正常。但是,我试图设置节点相对于世界原点的位置,我不希望节点附加到平面上。

我试过设置node.positionnode.worldPosition都没有用;虽然节点的位置发生变化,但当相机移动时,节点不会保持静止,而是随着相机移动。我是 ARKit 的新手,所以我可能在做一些愚蠢的事情,但我不知道我需要做什么,所以任何帮助将不胜感激。

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

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

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

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

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

但是,我相信你的情况正在发生(调试起来有点棘手)......你很可能将加载的模型放在场景中检测到的水平面下方。

换句话说,您可能已使用负 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 放在 cameraView 前面 1 米处。

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