ArCameraConfig
описывает свойства базового датчика камеры, в том числе:
- Идентификатор камеры
- Если доступен, будет ли использоваться датчик глубины.
- Направление камеры:
- фронтальная (селфи)
- лицом назад (мир)
- Диапазон FPS (кадров в секунду)
- Размеры образа процессора
- Размер текстуры графического процессора
- Если присутствует, будет ли использоваться стереомногокамера устройства.
При создании нового сеанса ARCore ARCore использует ArSession_setCameraConfig()
для установки конфигурации камеры, которая лучше всего соответствует списку доступных конфигураций, возвращаемых ArSession_getSupportedCameraConfigsWithFilter()
. Ваше приложение может использовать ArCameraConfigFilter
чтобы сузить доступные конфигурации камеры для данного устройства во время выполнения путем фильтрации на основе потребностей вашего приложения.
Общие случаи использования фильтрации включают в себя:
Ограничение частоты кадров при захвате камеры до 30 кадров в секунду . На устройствах, поддерживающих частоту кадров 60 кадров в секунду, ARCore будет отдавать приоритет конфигурациям камер, поддерживающим эту частоту кадров. Чтобы отфильтровать все конфигурации камеры, поддерживающие 60 кадров в секунду, примените фильтр с помощью
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);
Выбор альтернативного разрешения текстуры графического процессора . На поддерживаемых устройствах ARCore может обеспечивать дополнительное разрешение текстур графического процессора. Выбор текстуры графического процессора с более низким разрешением может помочь повысить производительность приложения за счет снижения нагрузки на графический процессор и снижения требований к пропускной способности памяти, хотя это не гарантирует повышения производительности во всех случаях.
Использование фильтров конфигурации камеры
Выполните следующие действия, чтобы ваше приложение могло фильтровать конфигурации камеры.
// 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()
.