简体   繁体   中英

Android ARCore render objects without Sceneform

I would like to render spheres like in the image below attached to anchors. 在此处输入图片说明

Unfortunately all examples are based on a Sceneform which I don't want to use. The spheres should be free in in the air without being bound to a flat surface.

With the Hello_AR example from Google I was able to render a 3D sphere into the space and fix it by attaching it to an anchor.

在此处输入图片说明

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            ...
            backgroundRenderer.createOnGlThread(this);

            virtualObject.createOnGlThread(this, "models/sphere.obj", "models/sphere.png");
            virtualObject.setMaterialProperties(0.0f, 0.0f, 0.0f, 0.0f);
            ...
    }
    @Override
    public void onDrawFrame(GL10 gl) {
            ...
            // Get projection matrix.
            float[] projmtx = new float[16];
            camera.getProjectionMatrix(projmtx, 0, 0.1f, 100.0f);

            // Get camera matrix and draw.
            float[] viewmtx = new float[16];
            camera.getViewMatrix(viewmtx, 0);

            // Compute lighting from average intensity of the image.
            // The first three components are color scaling factors.
            // The last one is the average pixel intensity in gamma space.
            final float[] colorCorrectionRgba = new float[] {255f, 0, 0, 255f};
            frame.getLightEstimate().getColorCorrection(colorCorrectionRgba, 0);

            // Visualize anchors created by touch.
            float scaleFactor = 1.0f;
            for (Anchor anchor : anchors) {
                if (anchor.getTrackingState() != TrackingState.TRACKING) {
                    continue;
                }
                anchor.getPose().toMatrix(anchorMatrix, 0);
                virtualObject.updateModelMatrix(anchorMatrix, scaleFactor);
                float[] objColor = new float[] { 255f, 255f, 255f, 0 };
                virtualObject.draw(viewmtx, projmtx, colorCorrectionRgba, objColor);
            }
    }

With that I am able to create a black sphere 1 meter away from the camera in the air.

My questions:

  1. Is this a good / correct way to do it?

  2. How do I change the color of the sphere, since color values have no effect on the object

  3. How do I make it transparent?

Thank you very much.

You need to attach it to anchor. You don't need to use sceneform. Sceneform is only one of two methods. In terms of color and transparency it depends on the way you serve your object. In your code I see that you're using material so it's hard to change color.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM