我的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()
它们都没有对罗盘进行任何明显的转换。看来还是静止的。
答案 0 :(得分:0)
用完注释字符...对不起-必须将其放在答案部分。
将90度转换为弧度,旋转到该值。旋转模型在3D中可能会造成混乱(无论如何对我来说),有时一开始只使用SCNBox会更容易-如果您不改变相机视图,默认情况下只要您向下看-Z它将具有正确的旋转。您可以打开3D轮廓线,有时这可以提供更好的视觉效果,也可以仅对具有不同颜色的框进行纹理贴图,以便红色位于顶部,绿色位于顶部或其他位置。
然后,您可以重塑盒子的形状,以不同的角度旋转盒子,直到获得RotateTo,rotateBy,rotateAround的悬挂。我不是数学专家,所以有时候对我来说是个反复试验的不幸,但是一旦我了解了发生的事情,便可以将模型放进去并且知道我的数学有效-然后,如果我必须对模型做一些工作,例如枢轴点或需要更改模型-设置Z-UP或其他功能(此信息:59766878),那么我一次只专注于一件事,而没有解决任何问题的组合。
我还使用lookAt并将各种(隐藏的)节点放置在特定位置,以便可以在游戏的各个点和不同的视角查看X,Y,Z旋转的样子。