【问题标题】:Augmented Reality增强现实
【发布时间】:2023-07-18 14:27:01
【问题描述】:

我想在相机的图像上绘制位置的图钉和信息.. 请任何人帮助我.. 我已经在应用程序委托中完成了编码 代码是:-

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]; }
    }

它显示了摄像头。不是我想检测这个地方并将图钉放在显示那个地方信息的那个地方。

【问题讨论】:

    标签: iphone augmented-reality


    【解决方案1】:

    这里有一个更简单的方法来检测相机的存在:

    BOOL isCameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
    

    恐怕还有 99% 的工作要做。大致需要以下内容:

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

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

    【讨论】:

      【解决方案2】:

      请通过

      https://github.com/zac/iphonearkit.

      这是目前最好的 ObjectiveC 代码。

      【讨论】:

      • 以下代码示例也可能是很好的资源:@​​987654322@(适用于 Android 和 iOS)