我正在尝试将一个节点(一个球体)添加到一个身体模型,但是在通过平移手势旋转模型后它无法正常工作。
以下是我添加节点的方式(使用长按手势):
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:
相关的内容,但找不到效果良好的示例。
问题是,如果我旋转模型,球体定位不正确。它们的位置总是好像模型处于初始状态。
如果我转动身体并长时间轻拍他的手臂(在侧面),球体会被添加到身体前方漂浮的某处,如上所示。
我不知道如何解决这个问题。感谢有人可以帮助我。谢谢!