相关疑难解决方法(0)

随着iOS设备的移动,cameranode旋转

这是360度视频播放器项目.

我添加了一个cameranode(SCNNode)到一个根节点,cameranode被放在了中心(0,0,0)SCNSphere,它现在可以播放视频了.

现在我必须使用devicemotion.设备移动时我需要旋转相机.不只是旋转一定的角度.(不只是设备移动,当我拿着设备时,我的移动方式就像设备移动一样.因为我发现如果我使用deviceMotion.attitude.roll,cameranode仅在设备自行移动时移动,而不是当我绕着设备移动时)

当设备位于(x1,y1,z1)位置时,cameranode将随设备移动而旋转,当设备再次位于(x1,y1,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");
    }
Run Code Online (Sandbox Code Playgroud)

数学可能是错误的,我不知道为什么我会划分60,但它似乎是我使用时所需的最接近的值 [self.cameraNode runAction:[SCNAction rotateByX:-tempY …

ios cmmotionmanager scenekit scnnode

13
推荐指数
1
解决办法
2404
查看次数

如何避免在Core Motion控制的SceneKit相机中滚动?

我正在CMDeviceMotion使用本答案中描述的CMDeviceMotion扩展将SceneKit相机设置为当前姿态:

func deviceDidMove(motion: CMDeviceMotion?, error: NSError?) {
    if let motion = motion {
        let orientation = motion.gaze(atOrientation: UIApplication.sharedApplication().statusBarOrientation)
        cameraNode.orientation = orientation
    }
}
Run Code Online (Sandbox Code Playgroud)

这很漂亮,但是,我想阻止旋转(滚动)并且只允许相机转动(偏转)和俯仰.

我试图将四元数转换回欧拉角,并将roll保持为0:

cameraNode.eulerAngles = SCNVector3(
            x: orientation.pitch(),
            y: orientation.yaw(),
            z: 0)
Run Code Online (Sandbox Code Playgroud)

然而,这仅适用于偏航运动的一半.另一半,相机倒置.我怀疑这是涉及欧拉角的万向节锁定问题.

四元数对我来说有点像黑魔法,但是有没有办法直接在四元数上去除滚动分量,这样我就可以避免欧拉角?

camera quaternions ios core-motion scenekit

6
推荐指数
0
解决办法
669
查看次数

CMMotionData到SceneKit SCNNode方向

尝试使用CoreMotion正确旋转SceneKit相机.我构建的场景做得相当简单......我所做的就是创建一堆盒子,分布在一个区域中,相机只是指向Z轴.

不幸的是,从设备运动返回的数据似乎与设备的物理位置和方向无关.它似乎随意蜿蜒.

正如SO帖子中所建议的那样,我将态度的四元数直接传递给相机节点的方向属性.

我误解了核心动作在这里给我的数据吗?这种态度不应该反映出设备的物理定位吗?还是增量运动,我应该建立在先前的方向?

quaternions augmented-reality core-motion cmmotionmanager scenekit

4
推荐指数
1
解决办法
1971
查看次数