ArCore :: anchor - чтобы появляться перед камерой всегда используя ArSession_acquireNewAnchor API - PullRequest
0 голосов
/ 02 января 2019

App-информация:

Я занимаюсь разработкой приложения для Android на основе ArCore (NDK) для дополнения определенных объектов (сгенерированных из инструмента blender) поверх реальной камеры. Теперь я могу рисовать объекты как якоря , которые увеличиваются / уменьшаются при изменении положения камеры.

Я использую API ArSession_acquireNewAnchor для размещения якоря на расстоянии нескольких дюймов от камеры, как показано ниже.

ArPose_create(ar_session_, nullptr, &camera_pose);
ArPose_getPoseRaw(ar_session_, camera_pose, raw_camera_pose);
ArAnchor *anchor = nullptr;
if (ArSession_acquireNewAnchor(ar_session_, raw_camera_pose, &anchor)!=AR_SUCCESS) {          
    LOGE("Anchor is not successfully acquired");
    } 

После запуска приложения и удержания устройства в одном направлении виден вышеуказанный якорь.

Постановка задачи:

При изменении местоположения / направления камеры эти анкеры не отображаются должным образом. Пожалуйста, помогите - PFB изобразительное представление проблемы.

Мои наблюдения:

  1. Поскольку я получаю привязку на основе позы камеры, я предполагаю, что атрибуты направления и позы привязки будут основаны только на позе камеры, т.е. когда камера перемещается (перевод), якорь тоже перемещается соответственно - это мой понимание правильно?

    ArSession_acquireNewAnchor (ar_session_, raw_camera_pose , & anchor)

  2. При использовании получение привязки на основе hitResult все работает нормально, т.е. объект привязки появляется, когда устройства переключаются с одного направления на другое в соответствующем месте (координаты касания) - Однако мое использование -case не зависит от событий сенсорного ввода. Мне нужно добиться того же эффекта в заранее определенных координатах местоположения данной сцены.

    if ( ArHitResult_acquireNewAnchor (ar_session_, ar_hit_result, & anchor)! = AR_SUCCESS) { LOGE («НЕ УСПЕШНО»); вернуть; }

Problem-statement

Пожалуйста, обратите внимание, что это разрабатывается с использованием ArCore NDK.

1 Ответ

0 голосов
/ 02 апреля 2019

Я могу добиться этого, отрегулировав значение позы объекта привязки.

Позиция камеры в сыром виде состоит из 7 параметров, как показано ниже.

  raw_pose = {0, 0, 0, 1.0, driftx, 0,-5.0};

API для получения якоря -

  ArSession_acquireNewAnchor(ar_session_, raw_pose, &anchor);

Здесь седьмое значение индекса размещает якорь в 5 единицах от камеры. И 5-е значение индекса (driftx) указывает ArCore выполнить необходимое (единицы driftx) преобразование в x для данного якоря. Атрибут driftx предназначен для отслеживания дрейфа в позе камеры (только 5-е значение индекса позы камеры), когда устройство поворачивается с одной стороны на другую.

Метод, с помощью которого вычисляется дрейф, не дает точного решения, но близок к ожидаемому. Продолжается дальнейшее расследование по повышению точности дрейфа.

...