Как изменить цвет ModelRenderable?

у меня есть ModelRenderable, прикрепленный к узлу и отображаемый в ArFragment.

Я хотел бы выделить этот элемент для пользователя на 0,5 секунды заметным цветом.

Пробовал менять материал, но не получилось. Рендеринг зависает без выдачи ошибки. Вот что я пробовал:

private void addHighlightToNode(Node node) {

    CompletableFuture<Material> materialCompletableFuture =
            MaterialFactory.makeOpaqueWithColor(this, new Color(0, 255, 244));
    ModelRenderable highlightedRenderable = (ModelRenderable) node.getRenderable();
    highlightedRenderable = highlightedRenderable.makeCopy();
    try {
        highlightedRenderable.setMaterial(materialCompletableFuture.get());
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    node.setRenderable(highlightedRenderable);
}

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

node.setLight(Light.builder(Light.Type.POINT).setColor(new Color(0,255,244)).build());

Как я могу изменить цвет?


person Nils    schedule 18.07.2018    source источник


Ответы (1)


Создание материала является асинхронным, поэтому он возвращает CompletableFuture. Вы вызываете CompletableFuture.get(), который является блокирующим вызовом, но поскольку вы находитесь в потоке пользовательского интерфейса, это приводит к зависанию приложения. Если переместить настройку для вызова в thenAccept, то работает корректно.

  private void addHighlightToNode(Node node) {
    CompletableFuture<Material> materialCompletableFuture =
            MaterialFactory.makeOpaqueWithColor(this, new Color(0, 255, 244));

    materialCompletableFuture.thenAccept(material -> {
      Renderable r2 = node.getRenderable().makeCopy();
      r2.setMaterial(material);
      node.setRenderable(r2);
    });
  }
person Clayton Wilkinson    schedule 18.07.2018
comment
Что ж, спасибо тебе! Это решило проблему, и я узнал больше о том, что я на самом деле здесь делаю... - person Nils; 18.07.2018
comment
Вы также можете изменить цвет существующего материала следующим образом: задокументировано здесь - person Dsternfeld; 20.07.2018