增强现实

时间:2011-09-07 13:18:04

标签: iphone augmented-reality

我想在相机的图像上绘制地点的引脚和信息.. 请任何人帮帮我.. 我已经在app委托中完成了编码 代码是: -

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 个答案:

答案 0 :(得分:7)

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

BOOL isCameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

99%的工作仍然领先我害怕。大概你需要以下内容:

  1. 获取用户的地理位置。
  2. 获取您要显示的兴趣点(POI)的地理位置。您可能需要使用第三方库,如Foursquare,Google地图或类似的东西。
  3. 使用两个点之间的直角三角形计算用户与POI之间的距离h ^ 2 = c ^ 2 + c ^ 2。
    请注意,球面几何中的距离是用半正公式计算的,但如果我们假设笛卡尔坐标,精度损失与小距离无关,所以我们就这样做了。
  4. 假设east为0º,则获取用户与POI的角度,该角度为aty dy / dx(y =纬度,x =经度)。 dy当然是来自用户和POI的纬度之间的差异。
  5. 从指南针获取方位并计算用户方位与POI角度之间的差异。
  6. 物体屏幕上的位置取决于方位和设备方向。如果用户正在查看POI,请在屏幕中间为POI绘制标签。如果存在与精确角度的偏移,则乘以offset * (width in pixels / horizontal field vision)以获得表示该点的标签的偏移量(以像素为单位)。对垂直偏移执行相同的操作。
    • 如果轴X上有旋转(see the axis here),则应用垂直偏移。
    • 如果轴Y上有旋转,则指南针的轴承会有更新。
    • 如果Z轴上有旋转,如果物体靠近,则以相反的角度旋转物体。
  7. 根据距离缩放标签,最小值和最大值。
  8. 要定位标签,您可能需要使用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 :(得分:1)

请完成

https://github.com/zac/iphonearkit

这是最好的objectiveC代码。