旋转2个框相交

时间:2015-03-18 14:45:23

标签: ios swift scenekit

我正在学习Scenekit并尝试旋转对象。 这是2个方框,并使用变换矩阵和SCNTransaction通过Z轴逆时针旋转它们。它可以工作,但它们在动画期间相交。

//1st node
let g1 = SCNBox(width: 2, height: 2, length: 2, chamferRadius: 0.05)
g1.firstMaterial?.diffuse.contents = UIColor.blueColor()
BoxNode1 = SCNNode(geometry: g1)
BoxNode1?.position=SCNVector3(x: 3, y: 0, z: 0)
BoxNode1?.pivot = SCNMatrix4MakeTranslation(0, 0, 1)
self.rootNode.addChildNode(BoxNode1!)

//2nd node
let g2 = SCNBox(width: 2, height: 2, length: 2, chamferRadius: 0.05)
g2.firstMaterial?.diffuse.contents = UIColor.whiteColor()
BoxNode2 = SCNNode(geometry: g2)
BoxNode2?.position=SCNVector3(x: 1, y: 0, z: 0)
BoxNode2?.pivot = SCNMatrix4MakeTranslation(0, 0, 1)
self.rootNode.addChildNode(BoxNode2!)

//rotation
var rot = SCNMatrix4MakeRotation(Float(M_PI_2), 0, 0, 1)
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(10)
BoxNode2?.transform = SCNMatrix4Mult(BoxNode2!.transform, rot)
BoxNode1?.transform = SCNMatrix4Mult(BoxNode1!.transform, rot)
SCNTransaction.commit()

在动画过程中,外框的旋转半径似乎不同。我怎么解决这个?

在另一个节点下添加这两个节点作为子节点和旋转父节点解决问题,但不是我的愿望。

1 个答案:

答案 0 :(得分:1)

SCNBox个实例的中心位于(0,0,0),因此您无需更改其支点。

此外,使用rotationeulerAngles属性可能比使用变换和矩阵乘法更容易。