[我正在尝试使我的SCNNode旋转,但似乎无法正常工作

问题描述 投票:0回答:1

我的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()

他们都没有对罗盘进行任何明显的转换。它似乎还是静止的。

swift scenekit scnnode
1个回答
0
投票

用完注释字符...很抱歉-必须将其放在答案部分。

将90度转换为弧度,旋转到该值。旋转模型在3D中可能会造成混乱(无论如何对我来说),有时刚开始使用SCNBox会更容易-默认情况下,只要您向下看-Z(如果您不更改相机视图),它将具有正确的旋转。您可以打开3D轮廓线,有时这可以帮助提供更好的视觉效果,或者仅对具有不同颜色的框进行纹理贴图,以使红色位于顶部,绿色位于顶部或其他位置。

然后,您可以重塑盒子的形状,以不同的角度旋转盒子,直到您掌握了rotateTo,rotateBy,rotateAround的悬挂。我不是数学专家,所以有时对我来说是个反复试验的不幸,但是,一旦我了解了发生了什么,就可以将模型放进去并且知道我的数学是可行的-然后,如果我必须对模型做一些工作,例如枢轴点或需要更改模型-设置Z-UP或其他功能(此职位:59766878),那么我一次只专注于一件事,而没有解决任何问题的组合。

我还使用lookAt并将各种(隐藏的)节点放置在特定位置,以便可以在游戏的各个点和从不同的角度看到X,Y,Z旋转的样子。

© www.soinside.com 2019 - 2024. All rights reserved.