Почему образец SDK Augmented Image Sceneform не работает только с объектами AR, построенными во время выполнения? - PullRequest
0 голосов
/ 20 сентября 2019

Я переделываю пример кода дополненного изображения Skeneform SDK после того, как я завершил сопроводительную лабораторию кода .Законченный образец добавляет два типа объектов к сцене AR: один моделируется с помощью программного обеспечения CAD и загружается из двоичного файла sfb (это зеленый лабиринт), а другой представляет собой красный шар, который создается во время выполнения с использованиемMaterialFactory и ShapeFactory.

Простой эксперимент состоит в том, чтобы удалить зеленый лабиринт, чтобы в нем был только красный шар (и, конечно же, удалить физический движок).В этом случае, однако, красный шар не появляется на сцене AR.

Интересно то, что зеленый лабиринт не должен появляться на сцене - я имею в виду, что мне не нужно создаватьNode, назначить рендеринг и т. Д. https://github.com/CsabaConsulting/sceneform-android-sdk/blob/master/samples/augmentedimage/app/src/main/java/com/google/ar/sceneform/samples/augmentedimage/AugmentedImageNode.java#L139:

mazeNode = new Node();
mazeNode.setParent(this);
mazeNode.setRenderable(mazeRenderable.getNow(null));

Но если вынуть код загрузки https://github.com/CsabaConsulting/sceneform-android-sdk/blob/master/samples/augmentedimage/app/src/main/java/com/google/ar/sceneform/samples/augmentedimage/AugmentedImageNode.java#L89

mazeRenderable =
        ModelRenderable.builder()
                .setSource(context, Uri.parse("GreenMaze.sfb"))
                .build();

и, самое главное, код в setImage который ожидает полной загрузки и сборки модели https://github.com/CsabaConsulting/sceneform-android-sdk/blob/master/samples/augmentedimage/app/src/main/java/com/google/ar/sceneform/samples/augmentedimage/AugmentedImageNode.java#L125

if (!mazeRenderable.isDone()) {
  CompletableFuture.allOf(mazeRenderable)
          .thenAccept((Void aVoid) -> setImage(image))
          .exceptionally(
                  throwable -> {
                    Log.e(TAG, "Exception loading", throwable);
                    return null;
                  });
  return;
}

Шар не появится.Мяч (и любые другие созданные мной объекты во время выполнения) не появятся, если я уберу этот .isDone() раздел выше.Я не нашел ни одного индикатора в AR Session или где-либо еще, который бы указывал на то, что что-то еще не готово к работе.В моем приложении я могу использовать только встроенные трехмерные объекты. Нужен ли sfb только для тех, кто появляется?

...