ARKit - 相对于世界原点在世界中定位一个节点
ARKit - positioning a node in the world relative to world origin
目前,我的代码加载了一个 3D 模型,使用该模型创建了一个节点,并在场景中显示了该节点。设置节点的 scale/rotation(欧拉角)工作正常。但是,我试图设置节点相对于世界原点的位置,我不希望节点附加到平面上。
我试过设置node.position和node.worldPosition都没有用;虽然节点的位置发生变化,但当相机移动时,节点不会保持静止,而是随着相机移动。我是 ARKit 的新手,所以我可能在做一些愚蠢的事情,但我不知道我需要做什么,所以任何帮助将不胜感激。
编辑:
奇怪的是,如果我将坐标设置为 SCNVector3(0, 3, 0) 没问题,但如果我超过一定米数,它似乎会失败。这是预期的
首先,这些常见问题可能导致世界跟踪不佳。
光线不好。导致可用于跟踪的特征点数量少
缺少纹理导致可用于跟踪的特征点数量少
快速移动导致图像模糊导致跟踪失败
但是,我相信你的情况正在发生(调试起来有点棘手)......你很可能将加载的模型放在场景中检测到的水平面下方。
换句话说,您可能已使用负 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 米处。
注意:我使用用于测试目的的游乐场自己验证了这个问题。
目前,我的代码加载了一个 3D 模型,使用该模型创建了一个节点,并在场景中显示了该节点。设置节点的 scale/rotation(欧拉角)工作正常。但是,我试图设置节点相对于世界原点的位置,我不希望节点附加到平面上。
我试过设置node.position和node.worldPosition都没有用;虽然节点的位置发生变化,但当相机移动时,节点不会保持静止,而是随着相机移动。我是 ARKit 的新手,所以我可能在做一些愚蠢的事情,但我不知道我需要做什么,所以任何帮助将不胜感激。
编辑: 奇怪的是,如果我将坐标设置为 SCNVector3(0, 3, 0) 没问题,但如果我超过一定米数,它似乎会失败。这是预期的
首先,这些常见问题可能导致世界跟踪不佳。
光线不好。导致可用于跟踪的特征点数量少
缺少纹理导致可用于跟踪的特征点数量少
快速移动导致图像模糊导致跟踪失败
但是,我相信你的情况正在发生(调试起来有点棘手)......你很可能将加载的模型放在场景中检测到的水平面下方。
换句话说,您可能已使用负 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 米处。
注意:我使用用于测试目的的游乐场自己验证了这个问题。