Как добавить координаты касания экрана в реальный мир в Scenform (AR CORE)? - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу добавить изображение в вид AR. Я могу добавить изображение, когда самолет отображается. Но я хочу добавить, даже если нет плоскости, которая отображается. Я хочу добавить его к реальной позиции вида AR - я на самом деле хочу преобразовать эту точку касания в мировую позицию вида AR.

   List<HitResult> hitResult = frame.hitTest(motionEvent);

                if (hitResult.size() != 0) {

//This code works fine
                    HitResult hit = hitResult.get(0);
                    Anchor anchor = hit.createAnchor();
                    AnchorNode anchorNode = new AnchorNode(anchor);
                    anchorNode.setParent(arFragment.getArSceneView().getScene());
                    anchors.add(anchor);


                } else {


//This is not Working

                    if (arFragment.getArSceneView().getSession() != null) {

                        Anchor anchor = arFragment.getArSceneView().getSession().createAnchor(frame.getCamera().getPose().compose(Pose.makeTranslation(0, 0, -1f)).extractTranslation());
                        AnchorNode anchorNode = new AnchorNode(anchor);
                        anchorNode.setParent(arFragment.getArSceneView().getScene());
                        anchors.add(anchor);

                        if (drawingText.equalsIgnoreCase("imagearrow")) {
                            addArrow(anchorNode, arrowType, arrowColor);
                        } 
                    }
                }

Я не получаю точную позицию точки касания точка в AR View.

1 Ответ

0 голосов
/ 30 апреля 2020

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

Camera camera = arFragment.getArSceneView().getScene().getCamera();

                        Ray ray = camera.screenPointToRay(motionEvent.getX(), motionEvent.getY());
                        Vector3 drawPoint = ray.getPoint(1f);


                        Log.d("HELLODRWAPOINT", String.valueOf(drawPoint.x));

                        ArSceneView arSceneView = arFragment.getArSceneView();
                        com.google.ar.core.Camera coreCamera = arSceneView.getArFrame().getCamera();
                        if (coreCamera.getTrackingState() != TrackingState.TRACKING) {
                            return;
                        }

                        float[] position = { drawPoint.x, drawPoint.y, drawPoint.z};
                        float[] rotation = { camera.getWorldRotation().x,camera.getWorldRotation().y,camera.getWorldRotation().z, camera.getWorldRotation().w };

                        Session session = arFragment.getArSceneView().getSession();
                        Anchor anchor = session.createAnchor(new Pose(position, rotation));
                        AnchorNode anchorNode = new AnchorNode(anchor);
                        anchorNode.setParent(arFragment.getArSceneView().getScene());
                        anchors.add(anchor);
...