我想渲染球体,如下面附有锚点的图像所示。
android - 不带Sceneform的Android ARCore渲染对象-LMLPHP

不幸的是,所有示例均基于我不想使用的Sceneform。球体应该在空气中自由流动,而不要束缚在平坦的表面上。

借助Google的Hello_AR示例,我能够将3D球体渲染到空间中并通过将其附加到锚点进行固定。

android - 不带Sceneform的Android ARCore渲染对象-LMLPHP

    @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);
            }
    }


这样一来,我就可以在距离相机不远处1米处创建一个黑色球体。

我的问题:


这是一个好的/正确的方法吗?
如何更改球体的颜色,因为颜色值对对象没有影响
如何使其透明?


非常感谢你。

最佳答案

您需要将其附加到锚点。您不需要使用sceneform。 Sceneform只是两种方法之一。
在颜色和透明度方面,这取决于您服务对象的方式。在您的代码中,我看到您使用的是材质,因此很难更改颜色。

关于android - 不带Sceneform的Android ARCore渲染对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57386286/

10-10 19:12