Incapaz de girar un SCNNode en ARKit
Estoy tratando de girar un SCNNode en el eje y, entonces, mi nodo (una flecha) apunta en la dirección correcta. Quiero hacer una aplicación de navegación que utiliza ARKit; cada flecha debe apuntar a la siguiente ubicación de la ruta que he recibido. La recuperación de la ruta funcione correctamente.
Los nodos se agregan a la nodoraíz de la escena. En algún momento me atraviesan una serie de nodos a la posición en la escena y aplicar el escalado para el nodo (basado en la distancia), que se hace todo correctamente. Sin embargo, al aplicar la rotación, esto no tiene ningún efecto. La rotación se realiza mediante la modificación de la propiedad de rotación del nodo:
directionNode.rotation = SCNVector4(x:0, y:1:, z:0, w:Float(bearing))
Este no tiene el efecto deseado. También traté de usar el runAction método, también sin efecto:
directionNode.runAction(SCNAction.rotateBy(x: 0, y: CGFloat(bearing), z: 0, duration: 0))
Aquí está el código que las posiciones y las escalas de los nodos.
for i in 0...(directionNodes.count - 1) {
let directionNode = directionNodes[i]
let translation = MatrixHelper.transformMatrix(for: matrix_identity_float4x4, originLocation: startingLocation, location: directionNode.location)
let position = SCNVector3.positionFromTransform(translation)
let distance = directionNode.location.distance(from: startingLocation)
DispatchQueue.main.async {
let scale = 100 / Float(distance)
directionNode.scale = SCNVector3(x: scale, y: scale, z: scale)
directionNode.anchor = ARAnchor(transform: translation)
directionNode.position = position
if (i < (self.directionNodes.count - 1)) {
// Apply rotation to the arrow
let successiveStepLocation = self.directionNodes[i + 1].location!
let bearing = directionNode.location.bearingToLocationRadian(successiveStepLocation)
// rotate
directionNode.rotation = SCNVector4(x:0, y:1:, z:0, w:Float(bearing))
}
}
}
Todo esto está envuelto en una SCNTransaction.
¿Alguien puede decirme por qué la rotación del nodo no está funcionando? Cualquier ayuda es muy apreciada.