Android ArCore Sceneform API. Как менять текстуры во время выполнения?

На сервере более 3000 моделей, каждая из которых имеет несколько цветов материала. Мне нужно отдельно загружать модели и текстуры и устанавливать текстуры в зависимости от выбора пользователя. Как изменить baseColorMap, normalMap, MetallicMap, RoughnessMap во время выполнения?

после modelRenderable.getMaterial (). setTexture ("normalMap", normalMap.get ()); ничего не происходит я что то делаю не так. Информации об этом в документации нет.


person Alexey Shmakov    schedule 23.05.2018    source источник


Ответы (2)


спасибо, что разместили этот вопрос.

  • setTexture(), похоже, не работает: к сожалению, эта часть нашего API все еще немного грубая; это работает, но очень легко ошибиться. Мы работаем над образцом, чтобы проиллюстрировать, как изменять параметры материала (включая текстуры) во время выполнения, и улучшим наши отчеты об ошибках в следующем выпуске.
  • Thousands of models w/ multiple permutations how?: The plan here has two parts:
    • The binaries used by the Android Studio plugin will be made available for use in build scripts on server platforms. This will allow you to do a server-side conversion of your assets to .sfb. We'll be releasing a blog post soon on how to do this.
    • .sfa получит возможность содержать свободные текстуры и материалы, явно не связанные с геометрией, а .sfa сможет объявлять зависимости данных от других .sfa. Это будет означать, что вы можете создавать (и доставлять) .sfb, которые содержат текстуры / материалы (но без геометрии), и .sfb, которые содержат геометрию (но не текстуры / материалы), и если они оба доступны во время создания экземпляра, это будет просто работать.
person Adrian Perez    schedule 23.05.2018

используйте этот код

CompletableFuture<Texture> futureTexture = Texture.builder()
          .setSource(this, R.drawable.shoes)
          .build();

и заменить на

/*.thenAccept(renderable -> andyRenderable = renderable)*/
        .thenAcceptBoth(futureTexture, (renderable, texture) -> {
            andyRenderable = renderable;
            andyRenderable.getMaterial().setTexture("baseColor", texture);
        })

должно сработать.

person Rikesh Shrestha    schedule 12.08.2018
comment
Работает только для baseColor, но как насчет normaMap? - person Tigran Babajanyan; 17.08.2019