我将一个cameranode(SCNNode)添加到根节点,cameranode放在SCNSphere的中心(0,0),现在可以播放视频.
现在我必须使用devicemotion.设备移动时,我需要旋转相机.不只是旋转一定的角度. (不只是设备移动,当我拿着一个设备,我的移动的方式,因为设备移动,因为我发现如果我使用deviceMotion.attitude.roll,手持设备只有在设备移动时才会移动,而不是当我环绕着设备)
当设备位于(x1,y1,z1)位置时,摄像机将随设备移动而旋转,当位于(x1,z1)的设备再次位置时,视图应与我们离开的最后一个相同.
这是我做的:
if (self.motionManager.gyroAvailable) { self.motionManager.gyroUpdateInterval = 1.0/60.0; [self.motionManager startGyroUpdatesToQueue:self.queue withHandler:^(CMGyroData *gyroData,NSError *error){ if (error) { [self.motionManager stopGyroUpdates]; NSLog(@"gyroscope encountered error:%@",error); }else { CGfloat tempX = 0; CGfloat tempY = 0; CGfloat tempZ = 0; if ((fabs(gyroData.rotationRate.y)/60) > 0.002) { tempY = gyroData.rotationRate.y/60; } tempX = gyroData.rotationRate.x/60; tempZ = gyroData.rotationRate.z/60; [self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0]]; } }]; }else { NSLog(@"This device has no gyroscope"); }
数学可能是错误的,我不知道为什么我会划分60,但是当我使用[self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0] ].
这是问题?
>我应该使用哪些数据?
CMGyroData或CMDeviceMotion.如果使用CMDeviceMotion,我应该使用哪个具体值? deviceMotion.attitude,deviceMotion.attitude.quaternion,deviceMotion.gravity
>这是旋转摄像师的正确方法?有很多方法,我不知道.
(SCNAction *)rotateByX:(CGfloat)xAngle y:(CGfloat)yAngle z:(CGfloat)zAngle持续时间:(NSTimeInterval)duration;
(SCNAction *)rotatetoX:(CGfloat)xAngle y:(CGfloat)yAngle z:(CGfloat)zAngle持续时间:(NSTimeInterval)duration;
解决方法 设备运动是最好的,因为它连接在多个传感器中,并以有意义的方式将数据融合在一起.最好避免使用欧拉角,因为它们受到所谓的万向节锁的影响.相反,使用四元数,并设置您的相机方向.我创建了a Swift class extension for CMDeviceMotion,让您确定设备正在查看(针对屏幕的任何方向).
从那里,直接旋转相机.首先,设置您的设备动作(在视图中出现或其他适当的位置):
if motionManager.deviceMotionAvailable { motionManager.deviceMotionUpdateInterval = 0.017 motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue(),withHandler: deviceDIDMove)}
然后使用前面提到的CMDeviceMotion扩展来处理deviceDIDMove实现中的这些更新:
func deviceDIDMove(motion: CMDeviceMotion?,error: NSError?) { if let motion = motion { yourCameraNode.orIEntation = motion.gaze(atOrIEntation: UIApplication.sharedApplication().statusbarOrIEntation) }}
而现在,您的相机应该在太空中遵循您的设备方向.
总结以上是内存溢出为你收集整理的随着iOS设备移动,cameranode旋转全部内容,希望文章能够帮你解决随着iOS设备移动,cameranode旋转所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)