iOS 4 で拡張現実アプリケーションをプログラムしようとしています。このアプリケーションをテストするために、iPhone 3GS を使用しています。
私の問題を例で説明します:
デバイスで山頂の名前を確認したい。デバイスの画面にその山が表示されると、その名前のラベルが表示されます。
そのラベルは山の上かその前に見えるという考えですが、私は山の右側にラベルが見えます。
複数の場所がある場合 (たとえば、2 つの山と教会)、同じ問題が発生します。私はいつも右側のラベルを見ます。
iPhone AR ツールキットを使用しています。
iPhone のコンパスに問題がありますか? なぜ私がこの問題を抱えているのか知っていますか?
このメソッドは、GPS のリッスンを開始するために呼び出されます。
- (void)startListening
{
// start our heading readings and our accelerometer readings.
if (![self locationManager]) {
CLLocationManager *newLocationManager = [[CLLocationManager alloc] init];
[self setLocationManager: newLocationManager];
[newLocationManager release];
[[self locationManager] setHeadingFilter: 1.0];
[[self locationManager] setDistanceFilter:2.0];
[[self locationManager] setDesiredAccuracy: kCLLocationAccuracyNearestTenMeters];
[[self locationManager] startUpdatingHeading];
[[self locationManager] startUpdatingLocation];
[[self locationManager] setDelegate: self];
}
if (![self accelerometerManager])
{
[self setAccelerometerManager: [UIAccelerometer sharedAccelerometer]];
[[self accelerometerManager] setUpdateInterval: 0.75];
[[self accelerometerManager] setDelegate: self];
}
if (![self centerCoordinate])
[self setCenterCoordinate:[ARCoordinate coordinateWithRadialDistance:1.0 inclination:0 azimuth:0]];
}
完全なソース コードはここにあります。
アップデート
また、真の見出しを使用するように次を変更しましたが、同じ問題が発生しています。
- (void)locationManager:(CLLocationManager *)manager
didUpdateHeading:(CLHeading *)newHeading
{
//latestHeading = degreesToRadian(newHeading.magneticHeading);
latestHeading = degreesToRadian(newHeading.trueHeading);
if (prevHeading == -1)
prevHeading = newHeading.magneticHeading;
[self updateCenterCoordinate];
}