Рендеринг / отображение пути навигации с рендерингами в ARCore?

В настоящее время я разрабатываю приложение для Android для навигации в помещении с дополненной реальностью, и я изо всех сил пытаюсь использовать Google ARCore с Sceneform, чтобы создать путь навигации от моего текущего местоположения до пункта назначения (мой вопрос касается рендеринга и отображения, у меня уже есть потребности в моем местоположении) .

Если бы кто-то мог описать мне концептуально или с помощью кода хорошую стратегию для итеративного рендеринга arrowRenderable в разных положениях, я был бы очень признателен (например, использую ли я Poses, setWorldPosition (), setLocalPosition () и т. д.) . Я также могу преобразовать (широту, долготу) в пространство камеры, поэтому я действительно хочу лучше понять рендеринг ARCore.

Заранее благодарим вас и дайте мне знать, если вам нужна дополнительная информация.

Обновлено:

Что касается моей реализации, я использую IndoorAtlas для обработки моего внутреннего позиционирования. SDK IndoorAtlas для Android поставляется с возможностью поиска пути, которая создает маршруты от вашего текущего местоположения до пункта назначения (это загружается из ранее установленного графика навигации через онлайн-набор инструментов IndoorAtlas). Эти маршруты состоят из участков с координатами начала и конца (широта, долгота). Я пытаюсь визуализировать объекты в AR итеративно по конечным координатам (широта, долгота).

Вот пример одной из опробованных мной реализаций:

public void createNavigationPath() {
        // loop through the wayfinding route
        for (IARoutingLeg leg : mCurrentRoute) {

            // current loc
            Location currentLoc = new Location("Current Location");
            currentLoc.setLatitude(mLocation.latitude);
            currentLoc.setLongitude(mLocation.latitude);

            // end of wayfinding route segment
            Location legEnd = new Location("Leg End");
            legEnd.setLatitude(leg.getEnd().getLatitude());
            legEnd.setLongitude(leg.getEnd().getLongitude());

            // conversion from (lat,long) to camera space
            // conversion implementation credit:  
            // https://github.com/dat-ng/ar-location-based-android
            float[] currentLocationInECEF = WSG84toECEF(currentLoc);
            float[] pointInECEF = WSG84toECEF(legEnd);
            float[] pointInENU = ECEFtoENU(currentLoc, currentLocationInECEF, pointInECEF);

            float[] cameraCoordinateVector = new float[4];

            Matrix.multiplyMV(cameraCoordinateVector, 0, mRotatedProjectionMatrix, 0, pointInENU, 0);

            Frame frame = arFragment.getArSceneView().getArFrame();

            // cameraCoordinateVector[2] is z, that always less than 0 to display on right position
            // if z > 0, the point will display on the opposite
            if (cameraCoordinateVector[2] < 0) {
                float x = (0.5f + cameraCoordinateVector[0] / cameraCoordinateVector[3]) * arFragment.getArSceneView().getWidth();
                float y = (0.5f - cameraCoordinateVector[1] / cameraCoordinateVector[3]) * arFragment.getArSceneView().getHeight();

                // Pose pose = new Pose(new float[]{x,y,cameraCoordinateVector[2]}, new float[]{0,0,0});

                Anchor anchor = arFragment.getArSceneView().getSession().createAnchor(frame.getCamera().getPose().compose(Pose.makeTranslation(x,y,cameraCoordinateVector[2])).extractTranslation());
                AnchorNode anchorNode = new AnchorNode(anchor);

                Node tempNode = new Node();
                tempNode.setParent(anchorNode);
                tempNode.setRenderable(arrowRenderable);

                Log.d(TAG, "Render Completed");
            }
        }
    }

В качестве альтернативы я также попытался использовать некоторые SDK для геолокации AR, такие как https://github.com/appoly/ARCore-Location, но это было слишком неточно при перемещении. Я еще не пробовал Wikitude SDK.

Добро пожаловать в Stack Overflow! Мы сможем помочь вам лучше, предоставив дополнительный контекст и подробности о вашей реализации, о том, что вы уже пробовали, а что не работает. См. руководящие указания для эффективной постановки вопроса.

J. Blackadar 22.08.2018 22:22

@ J.Blackadar Спасибо за ваш совет, я отредактировал свой исходный вопрос, чтобы попытаться добавить больше контекста к тому, что я спрашиваю.

nbazos 23.08.2018 20:38

wikitude очень хорошо работала в демонстрационной версии, которую я пробовал, но, конечно, это платное решение. У меня были аналогичные неудовлетворительные результаты с ARCore-Location, и я еще не нашел подходящего решения с открытым исходным кодом

Sameer J 05.02.2020 07:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
876
0

Другие вопросы по теме