Sceneform ARCore загружает и создает случайный 3D-ресурс

У меня есть метод, который создает и порождает 3D-ресурс в среде AR. 3D-ресурс - это файл .sfb, хранящийся в папке метаданных. У меня есть несколько 3D-ресурсов в папке метаданных, и я хочу, чтобы актив был выбран случайным образом при вызове этой функции. Это код, который у меня есть для создания определенного актива:

private void addCreatureToScene() {

    ModelRenderable
            .builder()
            **.setSource(this, Uri.parse("20170219_Dragon_small.sfb"))**
            .build()
            .thenAccept(renderable -> {

                    Node node = new Node();
                    node.setRenderable(renderable);
                    scene.addChild(node);

                    Random random = new Random();
                    int x = random.nextInt(6);
                    int z = random.nextInt(6);
                    int y = random.nextInt(5);

                    z = -z;

                    node.setWorldPosition(new Vector3(
                            (float) x,
                            y / 10f,
                            (float) z
                    )); 
            });
} 

Код .setSource, выделенный жирным шрифтом, указывает на конкретный 3D-ресурс. Есть ли способ случайным образом выбрать 3D-ресурс из папки метаданных? Спасибо за помощь.


person MarkM    schedule 27.01.2020    source источник


Ответы (1)


Чтобы помочь вам упростить эту задачу, вы должны попытаться разбить ее на более мелкие цели. Например, здесь вы пытаетесь:

  1. Выбрать случайный файл из папки
  2. Поместите этот объект в AR

Поскольку у вас уже есть 2-й шаг, сложный шаг, вычисленный, теперь посмотрите на первый шаг независимо от него. Вопрос, который вы задаете, состоит в том, чтобы выбрать случайное имя файла.

Есть несколько способов добиться этого. Самый простой из них - если вы уже знаете, каковы все эти имена файлов, вы можете создать список этих имен java, а затем использовать java.util.Random, чтобы получить одно из них наугад. Подробнее здесь: https://www.geeksforgeeks.org/randomly-select-items-from-a-list-in-java/

В противном случае вам понадобится функция для чтения всех файлов в папке, а затем случайного выбора из них. Надеюсь это поможет.

person theBrainyGeek    schedule 27.01.2020
comment
Здравствуйте, большое спасибо за вашу помощь! Я решил воспользоваться вашим последним вариантом создания функции, которая читает все файлы и случайным образом выбирает один. Используя Интернет и собирая идеи, я придумал функцию. Что бы я ни пытался, объект File продолжает возвращаться как ссылка на нулевой объект. т.е. файл не может найти каталог, на который я ссылаюсь. Это объявление файла: final File folder = new File (C: \\ Users \\ mark \\ HelloAR \\ app \ src \\ main \\ assets \); и вот ошибка: final File f: folder.listFiles () - person MarkM; 03.02.2020