SCNVector4:在x轴上旋转

时间:2017-09-06 08:01:20

标签: swift augmented-reality arkit cabasicanimation

我有一个球体并设法旋转它。但不幸的是沿着错误的轴线。

我的目标是像x轴一样旋转地球。你能帮我申请吗?

这是我现有的代码:

let spin = CABasicAnimation(keyPath: "rotation")
        // Use from-to to explicitly make a full rotation around z
        spin.fromValue = NSValue(scnVector4: SCNVector4(x: 1, y: 0, z: 0, w: 0))
        spin.toValue = NSValue(scnVector4: SCNVector4(x: 1, y: 0, z: 0, w: Float(CGFloat(-2 * Double.pi))))
        spin.duration = 30
        spin.repeatCount = .infinity
        sphereNode.addAnimation(spin, forKey: "spin around")

3 个答案:

答案 0 :(得分:0)

会是这样的

self.imageView.layer.transform = CATransform3DConcat(self.imageView.layer.transform, CATransform3DMakeRotation(M_PI,1.0,0.0,0.0));

答案 1 :(得分:0)

您已经有了解决方案:

spin.fromValue = NSValue(scnVector4: SCNVector4(x: 1, y: 0, z: 0, w: 0))
spin.toValue = NSValue(scnVector4: SCNVector4(x: 1, y: 0, z: 0, w: CGFloat.pi * 2))

如果你想改变方向,只需改变向量:)

spin.fromValue = NSValue(scnVector4: SCNVector4(x: 1, y: 0, z: 0, w: CGFloat.pi * 2))
spin.toValue = NSValue(scnVector4: SCNVector4(x: 1, y: 0, z: 0, w: 0))

答案 2 :(得分:0)

您可以使用SceneKit的Transaction绕X轴旋转地球模型:

let scene = SCNScene(named: "art.scnassets/model.scn")!
let modelEarth = scene.rootNode.childNode(withName: "model", 
                                          recursively: true)!

SCNTransaction.begin()
SCNTransaction.animationDuration = 500           // animation in seconds
SCNTransaction.animationTimingFunction = .init(name: .default)
modelEarth.rotation.x = 1
modelEarth.rotation.y = 0
modelEarth.rotation.z = 0
modelEarth.rotation.w = 100 * Float.pi           // fourth component
SCNTransaction.commit()