Невозможно разместить узел в источнике в ARKit - PullRequest
0 голосов
/ 25 августа 2018

Когда я пытаюсь добавить узлы, относящиеся к текущему кадру камеры или к матрице идентификаторов, они появляются в сцене:

if let currentFrame = sceneView.session.currentFrame {
  let identity = "1️⃣"
  let identityTransform = matrix_identity_float4x4 // i.e. simd_float4x4([[1.0, 0.0, 0.0, 0.0)], [0.0, 1.0, 0.0, 0.0)], [0.0, 0.0, 1.0, 0.0)], [0.0, 0.0, 0.0, 1.0)]])
  sceneView.session.add(anchor: LabelAnchor(string: identity, transform: identityTransform))

  let camera = "?"
  let cameraTransform = currentFrame.camera.transform // e.g. simd_float4x4([[0.333257, -0.936176, -0.111876, 0.0)], [-0.265663, 0.0206128, -0.963846, 0.0)], [0.904635, 0.350929, -0.241838, 0.0)], [0.19599, 0.0331948, -0.0420802, 1.0)]])
  sceneView.session.add(anchor: LabelAnchor(string: camera, transform: cameraTransform))
}

Когда я удаляю узел идентификации (в случае, если он визуально блокирует другиеузлы) и добавьте узел в начало координат, он не появится в сцене:

  let origin = "?"
  let originTransform = matrix_float4x4() // i.e. simd_float4x4([[0.0, 0.0, 0.0, 0.0)], [0.0, 0.0, 0.0, 0.0)], [0.0, 0.0, 0.0, 0.0)], [0.0, 0.0, 0.0, 0.0)]])
  sceneView.session.add(anchor: LabelAnchor(string: origin, transform: originTransform))

Обратите внимание, что в тестировании он появлялся только один раз из 10+.

Как можноЯ добавляю узел в начало моей сцены, и он должен быть видимым?

(Примечание. Можно предположить, что источником может быть matrix_identity_float4x4, но где я могу найти документацию, объясняющую это?)


Вот мои настройки проекта и другой код:

Я начинаю с шаблона Xcode по умолчанию для ARKit с использованием SpriteKit.

Я изменил свою конфигурацию на:

configuration.worldAlignment = .gravityAndHeading

Я создал простой LabelNode для отображения разных строк для разных узлов:

class LabelAnchor: ARAnchor {
  let string: String

  init(string: String, transform: matrix_float4x4) {
    self.string = string
    super.init(transform: transform)
  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

  var skLabelNode: SKLabelNode {
    let node = SKLabelNode(text: string)
    node.horizontalAlignmentMode = .center
    node.verticalAlignmentMode = .center
    return node
  }
}

И измененный вид (_ :,nodeFor:):

  func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? {
    // Create and configure a node for the anchor added to the view's session.

    switch anchor {
    case let anchor as LabelAnchor:
      return anchor.skLabelNode
    default:
      let labelNode = SKLabelNode(text: "?")
      labelNode.horizontalAlignmentMode = .center
      labelNode.verticalAlignmentMode = .center
      return labelNode;
    }
  }
...