Мировое положение узла всегда равно 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). Похоже на местную позицию. Только якорь дает соответствующую позицию в мире. Я хочу иметь возможность трансформировать узел в соответствии с мировыми трансформациями. Заранее спасибо.


person kewal kishan    schedule 04.09.2019    source источник


Ответы (1)


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

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

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

person alpaca0114    schedule 06.09.2019