使用 ARCORE 在墙上放置图像

Kőn*_*yás 7 java android augmented-reality arcore

我想用 ARCore 在墙上放置一个图像。该图像是从常规图像视图转换而来的。我只检测垂直表面,但是当我放置图像时,它是这样放置的:我无法弄清楚如何变换以将图像挂在墙上,就像在现实生活中一样。 在此处输入图片说明

    AR fragment
    fragment = (ArFragment) 
    getSupportFragmentManager().findFragmentById(R.id.sceneform_fragment);

    CompletableFuture<ViewRenderable> imgView = ViewRenderable.builder()
            .setView(this, R.layout.textview)
            .build();

    CompletableFuture.allOf(imgView).handle((notUsed, throwable) -> {
        // When you build a Renderable, Sceneform loads its resources in the background while
        // returning a CompletableFuture. Call handle(), thenAccept(), or check isDone()
        // before calling get().

        if (throwable != null) {

            Log.d("MainActivity", "onCreate: " + "Unable to load renderable");
            return null;
        }

        try {

            imageViewRenderable = imgView.get();

        } catch (InterruptedException | ExecutionException ex) {
            Log.d("MainActivity", "onCreate: Unable to load renderable");

        }

        return null;
    });

    try {
        mArSession = new Session(this);
    } catch (UnavailableArcoreNotInstalledException e) {
        e.printStackTrace();
    } catch (UnavailableApkTooOldException e) {
        e.printStackTrace();
    } catch (UnavailableSdkTooOldException e) {
        e.printStackTrace();
    } catch (UnavailableDeviceNotCompatibleException e) {
        e.printStackTrace();
    }

    mArConfig = new Config(mArSession);
    mArConfig.setUpdateMode(Config.UpdateMode.LATEST_CAMERA_IMAGE);
    mArConfig.setPlaneFindingMode(Config.PlaneFindingMode.VERTICAL);
    mArSession.configure(mArConfig);

    fragment.getArSceneView().setupSession(mArSession);

    fragment.setOnTapArPlaneListener((HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
                Anchor anchor = hitresult.createAnchor();
                AnchorNode anchorNode = new AnchorNode(anchor);

                anchorNode.setParent(fragment.getArSceneView().getScene());
                TransformableNode art = new TransformableNode(fragment.getTransformationSystem());
                art.setParent(anchorNode);
                art.setRenderable(imageViewRenderable);
                art.select();

                ImageView imageView = (ImageView)imageViewRenderable.getView();
                Picasso.get().load("http://www.cbk-enschede.nl/plaatjes/ens/jpg/GSA023.jpg").into(imageView);

            }
    );
Run Code Online (Sandbox Code Playgroud)