【发布时间】:2019-09-22 03:34:30
【问题描述】:
我正在尝试在 y 轴上旋转 SCNNode,以便我的节点(箭头)指向正确的方向。我想做一个使用 ARKit 的导航应用;每个箭头都需要指向我收到的路线的下一个位置。路线检索正常。
节点被添加到场景的rootNode。在某些时候,我遍历一个节点数组以将它们定位在场景中并对节点应用缩放(基于距离),这一切都正确完成。但是,当我应用旋转时,这没有效果。 旋转是通过修改节点的rotation属性来完成的:
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 箭头对象总是指向同一个方向。即使我“四处走动”,箭头也总是指向(在我的情况下)向左。 也许这有助于解决我的问题...
【问题讨论】:
标签: swift transform scenekit arkit