Мировое положение узла всегда равно origin - привязка ARKit

Я просто пытаюсь найти положение в мире и вращение узлов после того, как обнаруживаю и добавляю самолеты в свою AR-сцену.

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
  if !(anchor is ARPlaneAnchor) {
        return
    }
  let plane = //to visualise planes
  node.addChildNode(plane)
  print("Node : \(node.worldPosition)"
 }

но node.worldPosition всегда возвращает SCNVector3(x: 0.0, y: 0.0, z: 0.0). Похоже на местную позицию. Только якорь дает соответствующую позицию в мире. Я хочу иметь возможность преобразовывать узел в соответствии с мировыми преобразованиями. Заранее спасибо.

1 ответ

Решение

Tldr : Печать node.worldPosition внутри renderer(_:didUpdate:for:)

Ты используешь renderer(_:didAdd:for:). Думайте об этом как о месте, где вы первоначально отвечаете на новый новый узел на новом якоре. Новый узел еще не был обновлен соответствующей информацией. Добавление дочерней плоскости к этому новому узлу, как вы, было бы хорошим ответом.

Напротив, renderer(_:didUpdate:for:)используется для ответа на актуальные обновления на узле. Это когда мы видим, как ранее добавленный узел ведет себя так, как мы ожидали. Вот почему вы видите неожиданные значения.

Другие вопросы по тегам