Как поменять 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);
}
});
}
}
С уважением.