朝、
私はStackOverFlowを約1時間探し回って、2番目の場所が現在の場所(ニューヨークなど)に対して相対的な場所を表示する拡張現実アプリを作成するためのサンプルコード(主にgithub)をたくさん見つけました。
ただし、これらのいずれも、エンドユーザーにはるかにスムーズなエクスペリエンスを提供するiPhone4で提供されるジャイロスコープ機能を使用していないことに気付きました。
そのようなサンプルコードの例が存在するかどうか誰かが知っていますか?
乾杯、
チャーリー
朝、
私はStackOverFlowを約1時間探し回って、2番目の場所が現在の場所(ニューヨークなど)に対して相対的な場所を表示する拡張現実アプリを作成するためのサンプルコード(主にgithub)をたくさん見つけました。
ただし、これらのいずれも、エンドユーザーにはるかにスムーズなエクスペリエンスを提供するiPhone4で提供されるジャイロスコープ機能を使用していないことに気付きました。
そのようなサンプルコードの例が存在するかどうか誰かが知っていますか?
乾杯、
チャーリー
CoreMotionを使用して、ジャイロからデータを取得できます。基本的なアプローチはCMAttitude.rotationMatrix
、その逆行列(転置)を取得して、最初に設定した参照行列で乗算することです。developer.apple.comのTeapotサンプルプロジェクトは、CoreMotionを使用する基本的なアプローチを示しています。
真の拡張現実アプリを作成するには、OpenGLESを使用してモデルを作成する必要があります。個人的には、GL ES 2.0を試した後、iOSでv1.1の方が信頼性が高いことがわかりました。TeapotサンプルもGLES1.1を使用しています。
ジャイロを使用すると、マグネトメーターを使用してデバイスの基準軸を中心に回転させるよりもはるかに正確で「スムーズ」になります。秘訣は、デバイスの真の「方位」を取得し、GLESモデルオブジェクトをカメラの周囲の正しい位置に配置するために、最初に参照マトリックスを調整する方法です。GLのviewMatrixにCMAttitude.rotationMatrixの逆行列を掛けることにより、モデルを3Dで回転できることを達成した後。
gyroAvailable
最後に、iPhone 3Gもサポートする場合は、CMMotionManagerのプロパティ を確認し、磁力計を使用して別の実装を提供することを忘れないでください。
CMMotionManager
インスタンスメソッドを使用してみることができます
startDeviceMotionUpdatesToQueue:withHandler:
またstartGyroUpdatesToQueue:withHandler:
[CMMotionManagerObject startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^ (CMDeviceMotion *devMotion, NSError *error)
{
CMAttitude *currentAttitude = devMotion.attitude;
xRotation = currentAttitude.roll*180/M_PI;
yRotation = currentAttitude.pitch*180/M_PI;
zRotation = currentAttitude.yaw*180/M_PI;
}];
使用するstartGyroUpdatesToQueue:withHandler:
場合は、プロパティを介して結果を得ることができますgyroData
残念ながら、コードサンプルはわかりません。
すべてのARアプリに共通する問題は、デバイスの向きを確認する必要があることです。これはatan2と加速度計を使用して行うことができますが、ノイズが非常に多くなります(AppleのAccelerometerGraphサンプルプロジェクトに見られるように)。アダプティブローパスフィルターで修正しようとすると、ノイズが減少しますが、応答性が低下します。
ジャイロにはノイズはありませんが、エラーは十分に速く蓄積されるため、加速度計を使用して位置を常にリセットする必要があります。オブジェクトを回転させるのは良いようですが、コンパスを置き換えることはできません。