增强现实技术

3

我想在相机图像上绘制地点的标记和信息。 请帮忙。 我已经在应用程序委托中完成了编码。 代码如下:

overlay = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; overlay.opaque = NO; overlay.backgroundColor=[UIColor clearColor]; 
    [window addSubview:overlay]; 
#define CAMERA_TRANSFORM 1.24299 
    UIImagePickerController *uip;
    @try {
        uip = [[[UIImagePickerController alloc] init] autorelease];
        uip.sourceType = UIImagePickerControllerSourceTypeCamera; uip.showsCameraControls = NO;
        uip.toolbarHidden = YES; 
        uip.navigationBarHidden = YES; 
        uip.wantsFullScreenLayout = YES;
        uip.cameraViewTransform = CGAffineTransformScale(uip.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM); 
    } 
    @catch (NSException * e) 
    { [uip release]; 
        uip = nil;
    }
    @finally
    { if(uip) {
        [overlay addSubview:[uip view]]; [overlay release]; }
    }

它显示相机。我想要检测地点并在该地点放置图钉,以显示该地点的信息。

2个回答

7

这里有一个更直接的方法来检测相机是否存在:

BOOL isCameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

恐怕还有99%的工作需要完成。大致上你需要以下步骤:
  1. 获取用户的地理位置。
  2. 获取要显示的兴趣点(POI)的地理位置。你可能需要使用第三方库,如Foursquare、Google Maps或类似的库。
  3. 使用两点间的直角三角形计算用户和POI之间的距离h^2=c^2+c^2。
    请注意,球面几何中的距离是使用Haversine公式计算的,但如果我们假定笛卡尔坐标,则对于小距离的精度损失是不重要的,因此我们将这样做。
  4. 假设东方为0度,获取从用户到POI的角度,即atan dy/dx(y=纬度,x=经度)。dy当然是用户和POI之间纬度差。
  5. 获取指南针的方位并计算用户方向与POI角度之间的差异。
  6. 物体在屏幕上的位置取决于方位和设备方向。如果用户正好看着POI,在屏幕中央绘制一个标签表示POI。如果存在与确切角度的偏移,则将offset * (width in pixels / horizontal field vision)乘以表示该点的标签的像素偏移量。垂直偏移也是一样的。
    • 如果在X轴上旋转(请看这里的轴),应用垂直偏移。
    • 如果在Y轴上旋转,指南针会更新方位。
    • 如果在Z轴上旋转,如果物体靠近,则将物体旋转到相反的角度。
  7. 根据距离缩放标签,设定最小和最大值。

为了定位标签,您可能需要使用3D引擎或将它们围绕设备旋转成一个圆形(x=x+r*cos, y=y+r*sin),并使用广告牌效果。

如果这听起来太麻烦,请专注于仅实现对方位变化的响应,使用offset * width in pixels / horizontal field vision。水平视野是相机的可见角度。人类的视野是180º,iPhone 3是37.5º,而iPhone 4是45º吗?宽度为320,因此如果您离目标10º,就必须将其水平移动320*10/37.5像素。

如果指南针的读数有太多噪音,请添加低通滤波器。


1

下面的代码示例也可能非常有用:https://ar.qualcomm.at/qdevnet/ (适用于Android和iOS)。 - Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接