ARCore: получить 2d-координату от привязки или позы

Итак, это код, который я использую для получения всех плоскостей признаков.

                            while (planeIterator.hasNext()){
                                    Plane plane =  planeIterator.next();
        
                                    if(plane.getTrackingState() == TrackingState.TRACKING && 
    (plane.getType() == Plane.Type.VERTICAL||plane.getType() == Plane.Type.HORIZONTAL_UPWARD_FACING)){
        
                                    Iterator<Anchor> anchors =  frame.getUpdatedAnchors().iterator();
                                   Anchor  newAnchor = plane.createAnchor(plane.getCenterPose());
                                 }
                             }

Из документации неясно, как получить координаты 3D-мира от привязки. Если бы я мог получить эту трехмерную мировую координату, я мог бы преобразовать ее в 2D, используя

ArFragment.getArSceneView().getScene().getCamera().worldToScreenPoint()

Но как заставить трехмерный мир координироваться с newAnchor?


person MrRobot9    schedule 13.12.2020    source источник


Ответы (1)


Я думаю, вы спрашиваете позу якоря - это доступно из метода getPose():

публичная поза getPose ()

Возвращает положение якоря в мировом координатном пространстве.

Поза определяется как отображение объекта по его локальным координатам, т.е. если вы просто смотрите на сам объект, в мировые координаты. Обычно это описывается как вращение, за которым следует перевод. Вращение заставляет объект указывать правильный путь или правильно ориентироваться, а затем перевод перемещает его в правильное место в мировых координатах.

Если вы посмотрите на класс Pose, вы можете запросить у него любую информацию, необходимую для вашего варианта использования.

Небольшое замечание — я полагаю, вы знаете, что Sceneform не устарел, или, точнее, исходный код открыт, а затем заархивирован — см. здесь: https://developers.google.com/sceneform/develop.

person Mick    schedule 15.12.2020