我正在尝试绕y轴旋转一个SCNNode,使我的节点(箭头)指向正确的方向。我想制作一个使用ARKit的导航应用程序;每个箭头都需要指向我收到的路线的下一个位置。路线的检索正常工作。
这些节点被添加到场景的根节点中。在某个时刻,我遍历节点数组以将它们定位到场景中并对节点应用缩放(基于距离),这一切都做得很正确。然而,当我应用旋转时,这没有任何效果。 旋转是通过修改节点的旋转属性完成的:
directionNode.rotation = SCNVector4(x:0, y:1:, z:0, w:Float(bearing))
这并没有产生期望的效果。 我还尝试使用runAction方法,但也没有效果:
directionNode.runAction(SCNAction.rotateBy(x: 0, y: CGFloat(bearing), z: 0, duration: 0))
这是定位和缩放节点的代码。
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))
}
}
}
这一切都包含在 SCNTransaction 中。
有人能告诉我为什么节点的旋转不起作用吗?非常感谢任何帮助。
[编辑]:我忘了提到,我正在尝试旋转的 3D 箭头对象始终指向相同的方向。即使我“走过去”,箭头始终指向(在我的情况下)左侧。 也许这有助于解决我的问题...
nil
,那么就没有几何体可以观察了。这可能是由于锚点或缺少几何体引起的。 - Andy Jazz