Как поменять 3D Модель в реальном времени

Столкнулся с вопросом - как по нажатию на кнопку заменить 3D объект в ARCore. Попробовал заранее создать модели, занести их в массив и уже потом к нему обращаться, но приложение вылетает как только я пытаюсь разместить первое изображение. Буду рад помощи или идеи, как это можно правильно реализовать. Вот мой код.

  super.onCreate(savedInstanceState);
        setContentView(R.layout.arcore_layout);

        roseArray = new ArrayList<>();
 ModelRenderable.builder()
                .setSource(this, Uri.parse("griffin_07clip_shadow_alfa_hashed_emission_0.sfa"))
                .build()
                .thenAccept(modelRenderable1 -> {
                    roseArray.add(modelRenderable1);
                })
                .exceptionally(throwable ->{
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setMessage(throwable.getMessage())
                            .show();
                    return null;
                });

        ModelRenderable.builder()
                .setSource(arFragment.getContext(), R.raw.rose1)
                .build()
                .thenAccept(renderable -> {
                    roseArray.add(modelRenderable);
                })
//
                .exceptionally(throwable ->{
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setMessage(throwable.getMessage())
                            .show();
                    return null;
                });

        arFragment.setOnTapArPlaneListener((hitResult, plane, motionEvent) -> {

            anchor = hitResult.createAnchor();
            modelRenderable = roseArray.get(index);
            changeModel();
           
    }

 private void addViewToScene(AnchorNode anchorNode) {
        TransformableNode transformableNode = new 
        TransformableNode(arFragment.getTransformationSystem());
        transformableNode.setParent(anchorNode);
        transformableNode.setRenderable(modelRenderable);
        transformableNode.select();
    }

 private void changeModel() {


            nextModel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    index++;
                    modelRenderable = roseArray.get(index);
                }
            });

    }
}

С уважением.


Ответы (0 шт):