Добавленный объект на вертикальной плоскости всегда вращается в ARCore - PullRequest
0 голосов
/ 09 января 2019

enter image description here

Я добавляю изображение в вертикальной плоскости в ARFragment Sceneform. Но это всегда вращается. Код работает нормально на горизонтальной плоскости. Мой код для размещения изображений на вертикальной плоскости выглядит следующим образом:

arFragment.setOnTapArPlaneListener { hitResult: HitResult, 
                                         plane: Plane, 
                                   motionEvent: MotionEvent ->

    if(!isOnceTapedOnSurface) {
        val anchor = hitResult.createAnchor()
        val anchorNode = AnchorNode(anchor)
        anchorNode.setParent(arFragment.arSceneView.scene)

        andy = TransformableNode(arFragment.transformationSystem)

        if(plane.type == Plane.Type.VERTICAL) {
            val anchorUp = anchorNode.up
            andy.setLookDirection(Vector3.up(), anchorUp)
        }

        andy.setParent(anchorNode)
        andy.renderable = andyRenderable
        andy.select()

        // arFragment.arSceneView.planeRenderer.isVisible = false
        isOnceTapedOnSurface = true
    }
}

1 Ответ

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

Чтобы решить эту проблему, вам нужно установить public Pose getCenterPose(). Возвращает позу центра обнаруженной плоскости, определенной для начала координат. Преобразованная ось +Y позы будет иметь нормальную точку вне плоскости, а оси +X и +Z ориентируют границы ограничивающего прямоугольника.

anchor = mySession.createAnchor(plane.getCenterPose())

Когда отслеживаемое состояние TRACKING, эта поза синхронизируется с последним кадром. Когда его отслеживаемое состояние PAUSED, будет возвращена поза идентификации.

Ваш код может быть следующим:

Anchor newAnchor;

for (Plane plane : mSession.getAllTrackables(Plane.class)) {

    if(plane.getType() == Plane.Type.VERTICAL && 
       plane.getTrackingState() == TrackingState.TRACKING) {
          newAnchor = plane.createAnchor(plane.getCenterPose());
          break;
    }
}

Еще одна вещь от разработчиков программного обеспечения Google ARCore :

Keep objects close to anchors.

При закреплении объектов убедитесь, что они находятся рядом с используемым якорем. Старайтесь не размещать объекты дальше, чем на несколько метров от якоря, чтобы предотвратить неожиданное вращательное движение из-за обновлений ARCore в мировых космических координатах.

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

Надеюсь, это поможет.

...