Когда я пытаюсь добавить узлы, относящиеся к текущему кадру камеры или к матрице идентификаторов, они появляются в сцене:
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;
}
}