3

我正在尝试编写一个非常基本的全景应用程序。

通过使用 CMMotionManager,我可以获得动态更新以确定拍摄下一张照片的适当时刻。有时此代码运行良好,但在大多数情况下,它拍摄照片太早或太晚。请帮助我了解我到底做错了什么。

下面是 iPhone 在纵向模式下的代码示例。

#define CC_RADIANS_TO_DEGREES(__ANGLE__) ((__ANGLE__) * 57.29577951f) // PI * 180
#define FOV_IN_PORTRAIT_MODE 41.5;

double prevTime;
double currAngle;

- (void)motionUpdate:(CMDeviceMotion *)motion
{
    if (!prevTime) {
        prevTime = motion.timestamp;
        return;
    }

    //Calculate delta time between previous motionUpdate call and _now_
    double deltaTime = motion.timestamp - prevTime;
    prevTime = motion.timestamp;

    //Y axis rotation
    CMRotationRate rotationRate = motion.rotationRate;
    double rotation = rotationRate.y;

    if (fabs(rotation) < 0.05) //igonre bias
        return;

    //Calculate the angular distance
    double anglePathRad = rotation * deltaTime;

    //calculate total panoram angle
    currAngle += CC_RADIANS_TO_DEGREES(anglePathRad);

    if (fabs(currAngle) >= FOV_IN_PORTRAIT_MODE) {
        currAngle = 0;
        [self takePicture];
    }

}
4

0 回答 0