我的SCNNode
是我想向北旋转的罗盘。
compassNode = scene?.rootNode.childNodes[0]
我已成功获取航向数据并将其转换为弧度并将其存储在名为angle的变量中。
angle = newHeading.trueHeading.toRadians
我现在尝试了三种方法:
rotate = SCNAction.rotate(by: CGFloat(angle), around: SCNVector3(0, 1, 0), duration: 0.5)
compassNode?.runAction(rotate)
和
compassNode?.rotation = SCNVector4Make(0, 1, 0, Float(angle))
和
let oldTransform = compassNode?.transform
let newTransform = SCNMatrix4MakeRotation(Float(angle), 0, 1, 0)
SCNTransaction.begin()
SCNTransaction.animationDuration = 0.5
compassNode?.transform = SCNMatrix4Mult(newTransform, oldTransform!)
SCNTransaction.commit()
他们都没有对罗盘进行任何明显的转换。它似乎还是静止的。
用完注释字符...很抱歉-必须将其放在答案部分。
将90度转换为弧度,旋转到该值。旋转模型在3D中可能会造成混乱(无论如何对我来说),有时刚开始使用SCNBox会更容易-默认情况下,只要您向下看-Z(如果您不更改相机视图),它将具有正确的旋转。您可以打开3D轮廓线,有时这可以帮助提供更好的视觉效果,或者仅对具有不同颜色的框进行纹理贴图,以使红色位于顶部,绿色位于顶部或其他位置。
然后,您可以重塑盒子的形状,以不同的角度旋转盒子,直到您掌握了rotateTo,rotateBy,rotateAround的悬挂。我不是数学专家,所以有时对我来说是个反复试验的不幸,但是,一旦我了解了发生了什么,就可以将模型放进去并且知道我的数学是可行的-然后,如果我必须对模型做一些工作,例如枢轴点或需要更改模型-设置Z-UP或其他功能(此职位:59766878),那么我一次只专注于一件事,而没有解决任何问题的组合。
我还使用lookAt并将各种(隐藏的)节点放置在特定位置,以便可以在游戏的各个点和从不同的角度看到X,Y,Z旋转的样子。