微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 如何使用平移手势旋转场景中的对象 – SceneKit

我想用Scene套件创建一个应用来解决Rubix Cube.我有自己的dae文件用于多维数据集.
这是我在viewDidLoad中的设置代码

let myscene = SCNScene(named: "Rubik1.scnassets/Rubiks_Cube.dae")
    scene.rootNode.addChildNode((myscene?.rootNode)!)

    // retrieve the SCNView
    let scnView = self.view as! SCNView

    // set the scene to the view
    scnView.scene = scene

    geometryNode = (scnView.scene?.rootNode.childNodeWithName("Cube",recursively: true))!

    let panRecognizer = UIPanGestureRecognizer(target: self,action: "panGesture:")
    scnView.addGestureRecognizer(panRecognizer)

在识别平移手势以旋转立方体时

func panGesture(gestureRecognize: UIPanGestureRecognizer){

    let translation = gestureRecognize.translationInView(gestureRecognize.view!)

    let x = Float(translation.x)
    let y = Float(-translation.y)

    let anglePan = sqrt(pow(x,2)+pow(y,2))*(Float)(M_PI)/180.0

    var rotationVector = SCNVector4()
    rotationVector.x = -y
    rotationVector.y = x
    rotationVector.z = 0
    rotationVector.w = anglePan

    geometryNode.rotation = rotationVector

    //geometryNode.transform = SCNMatrix4MakeRotation(anglePan,-y,x,0)

    if(gestureRecognize.state == UIGestureRecognizerState.Ended) {
        //
    }
}

上面的代码不保留以前的平移手势.我如何使用“rotationvector”或

SCNMatrix4MakeRotation(anglePan,0)

旋转立方体

@H_404_27@解决方法
问题已经解决

if(gestureRecognize.state == UIGestureRecognizerState.Ended) {

    let currentPivot = geometryNode.pivot
    let changePivot = SCNMatrix4Invert( geometryNode.transform)

    geometryNode.pivot = SCNMatrix4Mult(changePivot,currentPivot)

    geometryNode.transform = SCNMatrix4Identity
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐