Ios SceneKit基础:移动节点
我有一个简单的场景,其中有一个居中的对象,相机位于围绕中心的虚拟球体上(灵感来源于) 现在,我希望能够用两个手指平移的手势移动对象。只要我不先旋转相机,我的代码就可以正常工作。如果我首先将相机旋转180°(以便相机从后面看物体),那么运动方向是错误的(这对我来说是有意义的)。其他摄像机位置的情况更糟。但是,我无法找到如何将识别器的x/y平移转换或投影到平行于相机的平面。物体应该在手指下移动 这是我的场景设置:Ios SceneKit基础:移动节点,ios,uigesturerecognizer,scenekit,Ios,Uigesturerecognizer,Scenekit,我有一个简单的场景,其中有一个居中的对象,相机位于围绕中心的虚拟球体上(灵感来源于) 现在,我希望能够用两个手指平移的手势移动对象。只要我不先旋转相机,我的代码就可以正常工作。如果我首先将相机旋转180°(以便相机从后面看物体),那么运动方向是错误的(这对我来说是有意义的)。其他摄像机位置的情况更糟。但是,我无法找到如何将识别器的x/y平移转换或投影到平行于相机的平面。物体应该在手指下移动 这是我的场景设置: let scene = SCNScene() //add camer
let scene = SCNScene()
//add camera
let camera = SCNCamera()
camera.usesOrthographicProjection = true
camera.orthographicScale = 30
camera.zNear = 1.0
camera.zFar = 1000
cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3(x: 0.0, y: 0.0, z: 50.0)
cameraOrbit = SCNNode()
cameraOrbit.addChildNode(cameraNode)
scene.rootNode.addChildNode(cameraOrbit)
boxNode.geometry = SCNBox(width: 10, height: 40, length: 10, chamferRadius: 0.2)
scene.rootNode.addChildNode(boxNode)
let panMoveGestureRecognizer = UIPanGestureRecognizer(target: self, action:#selector(panMoveGesture))
panMoveGestureRecognizer.minimumNumberOfTouches = 2
sceneView.addGestureRecognizer(panMoveGestureRecognizer)
以及手势识别器代码:
func panMoveGesture(recognizer: UIPanGestureRecognizer) {
//move
let translation = recognizer.translation(in: self.view.superview)
var newXMovement = -Float(translation.x) * 0.1
var newYMovement = Float(translation.y) * 0.1
switch recognizer.state {
case .began:
currentXMovement = cameraOrbit.position.x
currentYMovement = cameraOrbit.position.y
case .changed:
newXMovement += currentXMovement
newYMovement += currentYMovement
cameraOrbit.position.x = newXMovement
cameraOrbit.position.y = newYMovement
case .ended:
currentXMovement = newXMovement
currentYMovement = newYMovement
default: break
}
}
请帮忙;-) 因此,您希望对象对手势做出响应,就像其轴在摄影机移动时相对于摄影机保持相同的方向一样。例如,假设对象的x轴指向右侧。将相机旋转180°,x轴仍然指向右侧,尽管您现在正在从后面查看对象。这是对的吗?我理解他是这么问的。我想不出一种方法,不将对象附加到相机上,并在相机移动期间对其进行约束。是的,这就是我想要实现的。您是否想到一种方法来比较相机的当前位置和要旋转的对象的方向,以便将变换转换为该关系?我认为这是另一种方法,但不知道如何做。因此,你希望你的对象对手势做出反应,就好像它的轴在相机移动时相对于相机保持相同的方向一样。例如,假设对象的x轴指向右侧。将相机旋转180°,x轴仍然指向右侧,尽管您现在正在从后面查看对象。这是对的吗?我理解他是这么问的。我想不出一种方法,不将对象附加到相机上,并在相机移动期间对其进行约束。是的,这就是我想要实现的。您是否想到一种方法来比较相机的当前位置和要旋转的对象的方向,以便将变换转换为该关系?我认为这是另一种方法,但不知道怎么做。