配置相机

ArCameraConfig 描述 底层摄像头传感器,包括:

  • 相机 ID
  • 是否会使用深度传感器(如果有)
  • 摄像头的朝向: <ph type="x-smartling-placeholder">
      </ph>
    • 前置(自拍)
    • 后置(全球)
  • FPS(每秒帧数)范围
  • CPU 图片尺寸
  • GPU 纹理维度
  • 系统是否会使用设备的立体声多摄像头(如果有)

创建新的 ARCore 会话时,ARCore 会使用 ArSession_setCameraConfig(),用于设置相机配置 最符合 ArSession_getSupportedCameraConfigsWithFilter()。 您的应用可以使用 ArCameraConfigFilter 可在运行时缩小指定设备的可用摄像头配置范围,具体方法是: 根据应用需求进行过滤

常见的过滤用例包括:

  • 将相机拍摄帧速率限制为 30 fps。在支持此功能的设备上 60 fps,ARCore 将优先支持支持该帧速率的摄像头配置 帧速率如需过滤掉支持 60 fps 的所有相机配置, 应用过滤条件 ArCameraConfigFilter_setTargetFps() 使用 AR_CAMERA_CONFIG_TARGET_FPS_30

    // Return only camera configs that target 30 FPS camera capture frame
    // rate.
    ArCameraConfigFilter_setTargetFps(session, filter,
                                      AR_CAMERA_CONFIG_TARGET_FPS_30);

  • 禁止 ARCore 使用深度传感器。在安装了 支持深度传感器,ARCore 会优先考虑使用深度的摄像头配置 传感器。要过滤掉使用深度传感器的所有相机配置,请将 ArCameraConfigFilter_setDepthSensorUsage() 使用 AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE 过滤。

    ArCameraConfigFilter_setDepthSensorUsage(
        session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE);

  • 选择替代 GPU 纹理分辨率。已开启 支持的设备,ARCore 可以提供 更高的 GPU 纹理分辨率。选择分辨率较低的 GPU 纹理 可能有助于通过减少 GPU 负载和降低内存来提升应用性能 但无法保证一定能提高 所有情况。

使用相机配置过滤器

请按照以下步骤让应用过滤相机配置。

// Create an ARCore session.
ArSession* session;
ArSession_create(env, context, &session);

// Create a camera config list and filter for the session.
ArCameraConfig* selected_config;
ArCameraConfigList* configs;
ArCameraConfigFilter* filter;
ArCameraConfig_create(session, &selected_config);
ArCameraConfigList_create(session, &configs);
ArCameraConfigFilter_create(session, &filter);

// Return only camera configs that target 30 fps camera capture frame rate.
ArCameraConfigFilter_setTargetFps(session, filter,
                                  AR_CAMERA_CONFIG_TARGET_FPS_30);

// Return only camera configs that will not use the depth sensor.
ArCameraConfigFilter_setDepthSensorUsage(
    session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE);

// Get list of configs that match filter settings.
// In this case, this list is guaranteed to contain at least one element,
// because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE
// are supported on all ARCore supported devices.
ArSession_getSupportedCameraConfigsWithFilter(session, filter, configs);

// Use element 0 from the list of returned camera configs. This is because
// it contains the camera config that best matches the specified filter
// settings.
ArCameraConfigList_getItem(session, configs, 0, selected_config);

// Set the camera config to use selected_config.
ArSession_setCameraConfig(session, selected_config);

// Free memory.
ArCameraConfigFilter_destroy(filter);
ArCameraConfigList_destroy(configs);

专注模式

您还可以在会话配置中设置专注模式。固定焦距通常更适合跟踪(并且在大多数设备上是 ARCore 的默认设置)。无论是录制、摄影、摄像,还是在需要对附近物体进行拍摄时,都需要使用自动对焦功能 以便获得对焦。

请参阅 ArConfig_setFocusMode() 了解详情。