【问题标题】:Rotating 2 boxes intersects旋转2个框相交
【发布时间】:2015-03-23 22:42:01
【问题描述】:

我正在学习 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()

似乎外框的旋转半径在动画期间会发生变化。我怎么解决这个问题?

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

【问题讨论】:

    标签: ios swift scenekit


    【解决方案1】:

    SCNBox 实例的中心已经位于(0,0,0),因此您不必更改它们的轴心。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多