Ios 将相机朝其指向的方向移动,同时考虑旋转

Ios 将相机朝其指向的方向移动,同时考虑旋转,ios,vector,3d,camera,scenekit,Ios,Vector,3d,Camera,Scenekit,假设我们有一个场景,对象位于不同的xyz位置和旋转。 其中一个节点是一个相机,我想朝着一个假想的点移动,例如屏幕中心(512384)向后或向前移动。我所说的屏幕中心是指摄像机方向的中心,所以它是用户可以看到的。我目前面临的问题是: 虚点(512384)是二维的,如何将其转换为三维的 如何将相机向前/向后移动,并考虑旋转 考虑 例如,相机具有当前位置(x,y,z)(140,199,20),并绕其轴(x,y,z)(25°、187°、301°)旋转。那么,如何将摄影机移向其指向的方向。 我正在学习场景

假设我们有一个场景,对象位于不同的xyz位置和旋转。 其中一个节点是一个相机,我想朝着一个假想的点移动,例如屏幕中心(512384)向后或向前移动。我所说的屏幕中心是指摄像机方向的中心,所以它是用户可以看到的。我目前面临的问题是:

  • 虚点(512384)是二维的,如何将其转换为三维的
  • 如何将相机向前/向后移动,并考虑旋转 考虑
  • 例如,相机具有当前位置(x,y,z)(140,199,20),并绕其轴(x,y,z)(25°、187°、301°)旋转。那么,如何将摄影机移向其指向的方向。 我正在学习场景工具包(包括3D新手),非常感谢任何示例/伪代码

    到目前为止,我的努力只是将摄影机移向根节点

        [_cameraNode runAction:[SCNAction moveTo:SCNVector3Make(_cameraNode.presentationNode.position.x, _cameraNode.presentationNode.position.y, _cameraNode.presentationNode.position.z - 5) duration:1]];
    

    根据@mnuages的评论,我可以拿出必要的代码,实现我的要求。谢谢大家!

    -(SCNVector3)position:(SCNVector3)position multipliedByRotation:(SCNVector4)rotation
    {
       if (rotation.w == 0)
       {
           return position;
       }
       GLKVector3 gPosition = SCNVector3ToGLKVector3(position);
       GLKMatrix4 gRotation = GLKMatrix4MakeRotation(rotation.w, rotation.x, rotation.y, rotation.z);
       GLKVector3 r = GLKMatrix4MultiplyVector3(gRotation, gPosition);
       return SCNVector3FromGLKVector3(r);
     }
    
    -(SCNMatrix4)moveCamera
    {
       CGFloat step = 2.0
       CGFloat x = 0.0;
       CGFloat y = 0.0;
       CGFloat z = _touchCount == 2 ? -step : _touchCount == 1 ? step : 0.0;
    
       SCNMatrix4 cameraTransform = _cameraNode.transform;
    
       SCNVector3 rotatedPosition = [self position:SCNVector3Make(x, y, z) multipliedByRotation: _cameraNode.rotation];
       cameraTransform = SCNMatrix4Translate(cameraTransform, rotatedPosition.x, rotatedPosition.y, rotatedPosition.z);
    
        return cameraTransform;
    }
    

    你应该在这里找到答案:这真的帮助了我,谢谢你!