【发布时间】:2020-05-17 01:24:31
【问题描述】:
我的SCNNode 是一个我想向北旋转的指南针。
compassNode = scene?.rootNode.childNodes[0]
我已成功获取航向数据并将其转换为弧度并将其存储在一个名为角度的变量中。
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()
他们都没有对指南针进行任何明显的转变。它似乎是静止的。
【问题讨论】:
-
一些建议:确定 compassNode 是 child[0]?改变它的位置 x+10 什么的,确保它移动。尝试对角度值进行硬编码 - 确保它在做你认为应该做的事情。尝试先将其旋转到位,然后再围绕某物旋转
-
@Voltan 我可以通过改变 x 值来改变它的位置。因为当我创建场景时,我使用了作为场景的指南针模型文件,所以它应该是场景中的事物列表中的 child[0]。本质上,我确实希望指南针旋转。我只是想绕 y 轴旋转和旋转是一样的吗?
-
好的,那么节点就好了。我确实认为'around'有效,但它可能取决于节点的枢轴点以及模型是否以正确的旋转开始(我可以提供如何做到这一点的链接),但这就是为什么我建议对角度进行硬编码,这样在 90 度时,你确定它指向你认为它应该指向的点,然后你就可以回到数学问题中了。
-
@Voltan 如何将其硬编码为指向 90 度?另外我认为我可能对枢轴点有问题。我相信它可能不是指南针的死点,而是在它和指针之间。