gpt4 book ai didi

ios - 旋转2个盒子相交

转载 作者:行者123 更新时间:2023-11-29 02:12:33 25 4
gpt4 key购买 nike

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

似乎外框的旋转半径在动画过程中发生变化。我如何解决这个问题?

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

最佳答案

SCNBox 实例的中心已位于 (0,0,0),因此您无需更改其枢轴。

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

关于ios - 旋转2个盒子相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com