我正在尝试使用 iOS 4 编写增强现实应用程序。为了测试这个应用程序,我有一部 iPhone 3GS。
我将用一个例子来解释我的问题:
我想在我的设备上查看山顶的名称。当我在设备屏幕上看到那座山时,我会看到一个带有它名字的标签。
这个想法是在山上或前面看到那个标签,但我看到的是山右边的标签。
如果我有多个地点(例如,两座山和一座教堂),我也会遇到同样的问题。我总是看到右边的标签。
我正在使用 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];
}