旋转rootNode

时间:2016-05-18 20:15:54

标签: swift scenekit

我正在尝试将一个节点(一个球体)添加到一个身体模型,但是在通过平移手势旋转模型后它无法正常工作。

以下是我添加节点的方式(使用长按手势):

func addSphere(sender: UILongPressGestureRecognizer) {
    switch sender.state {
    case .Began:
        let location = sender.locationInView(bodyView)
        let hitResults = bodyView.hitTest(location, options: nil)

        if hitResults.count > 0 {
            let result = hitResults.first!

            let secondSphereGeometry = SCNSphere(radius: 0.015)                
            secondSphereGeometry.firstMaterial?.diffuse.contents = UIColor.redColor()

            let secondSphereNode = SCNNode(geometry: secondSphereGeometry)

            let vpWithZ = SCNVector3(x: Float(result.worldCoordinates.x), y: Float(result.worldCoordinates.y), z: Float( result.worldCoordinates.z))

            secondSphereNode.position = vpWithZ

            bodyView.scene!.rootNode.addChildNode(secondSphereNode)
        }

        break
    default:
        break
    }
}

以下是旋转视图的方法:

func rotateGesture(sender: UIPanGestureRecognizer) {
    let translation = sender.translationInView(sender.view)

    var newZAngle = (Float)(translation.x)*(Float)(M_PI)/180.0
    newZAngle += currentZAngle

    bodyView.scene!.rootNode.transform = SCNMatrix4MakeRotation(newZAngle, 0, 0, 1)

    if sender.state == .Ended {
        currentZAngle = newZAngle
    }
}

加载3D模型我就是这样做的:

bodyView.scene = SCNScene(named: "male_body.dae") // bodyView is a SCNView in the storyboard

我找到了与worldTransform属性以及函数convertPosition:toNode:相关的内容,但找不到效果良好的示例。

问题是,如果我旋转模型,球体定位不正确。它们的位置总是好像模型处于初始状态。

enter image description here

如果我转动身体并长时间轻拍他的手臂(在侧面),球体会被添加到身体前方漂浮的某处,如上所示。

我不知道如何解决这个问题。感谢有人可以帮助我。谢谢!

0 个答案:

没有答案