1

CoreMotion フレームワークを使用して拡張現実アプリを構築しようとしています。Apple の pARk サンプル コード プロジェクトから離れようとしましたが、ポートレート モードでしか機能しません。ランドスケープで動作する必要があります。横向きモードに切り替えると、オーバーレイ ビューのサブビューが反対方向に間違った速度で移動します (画面上での移動が速すぎるか遅すぎる)。

私は2つの解決策を提供する他の投稿を読みました:

  • CoreMotion ティー ポットの例で提案されているように、参照姿勢を作成し、その姿勢の逆を現在の姿勢に適用します。

  • 姿勢のクォータニオン表現を 90 度回転させる

私の拡張現実アプリでは真北を参照する必要があるため、最初の方法は機能しないと思います。

また、2番目の計算に必要な計算もわかりません。

この複雑な問題を解決する方法についての提案は歓迎します。

4

2 に答える 2

0

拡張現実アプリで現在どのくらい進んでいますか? AppleのPARkを見ることから始めるのは厳しいと思います。高度な数学的理解が必要です。しかし、もしそうなら、どうしてですか!

このリポジトリを見ることができます。これは、ポートレートおよびランドスケープ モードで動作する拡張現実プロジェクトです。回転の処理方法は次のとおりです。

- (void)deviceOrientationDidChange:(NSNotification *)notification {

prevHeading = HEADING_NOT_SET; 

[self currentDeviceOrientation];

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

// Later we may handle the Orientation of Faceup to show a Map.  For now let's ignore it.
if (orientation != UIDeviceOrientationUnknown && orientation != UIDeviceOrientationFaceUp && orientation != UIDeviceOrientationFaceDown) {

    CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadian(0));
    CGRect bounds = [[UIScreen mainScreen] bounds];

    switch (orientation) {
        case UIDeviceOrientationLandscapeLeft:
            transform          = CGAffineTransformMakeRotation(degreesToRadian(90));
            bounds.size.width  = [[UIScreen mainScreen] bounds].size.height;
            bounds.size.height = [[UIScreen mainScreen] bounds].size.width;
            break;
        case UIDeviceOrientationLandscapeRight:
            transform          = CGAffineTransformMakeRotation(degreesToRadian(-90));
            bounds.size.width  = [[UIScreen mainScreen] bounds].size.height;
            bounds.size.height = [[UIScreen mainScreen] bounds].size.width;
            break;
        case UIDeviceOrientationPortraitUpsideDown:
            transform = CGAffineTransformMakeRotation(degreesToRadian(180));
            break;
        default:
            break;
    }


    [displayView setTransform:CGAffineTransformIdentity];
    [displayView setTransform: transform];
    [displayView setBounds:bounds];  

    degreeRange = [self displayView].bounds.size.width / ADJUST_BY;

}
}

すべての注釈を回転させてから、デバイスの回転後にオーバーレイ ビューを回転させる必要があります。

于 2012-10-28T19:23:32.647 に答える
0

本当に行き詰まっていて、別のツールキットを使用したい場合は、iPhone-AR-Toolkitを試してください。縦向きと横向きの両方で機能します。

于 2013-01-04T15:35:03.613 に答える