Ios 将相机朝其指向的方向移动,同时考虑旋转
假设我们有一个场景,对象位于不同的xyz位置和旋转。 其中一个节点是一个相机,我想朝着一个假想的点移动,例如屏幕中心(512384)向后或向前移动。我所说的屏幕中心是指摄像机方向的中心,所以它是用户可以看到的。我目前面临的问题是: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°)旋转。那么,如何将摄影机移向其指向的方向。 我正在学习场景
[_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;
}
你应该在这里找到答案:这真的帮助了我,谢谢你!