如何更改 ModelRenderable 的颜色?
How to change Color of ModelRenderable?
我有一个 ModelRenderable 附加到节点并在 ArFragment 中呈现。
我想用醒目的颜色向用户突出显示此元素 0.5 秒。
我尝试更改 material,但没有成功。渲染冻结而没有抛出错误。这是我尝试过的:
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());
如何更改颜色?
创建 material 是异步的,这就是它 returns CompletableFuture 的原因。您正在调用 CompletableFuture.get(),这是一个阻塞调用,但由于您在 UI 线程上,它最终冻结了应用程序。
如果您将设置移动到 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);
});
}
我有一个 ModelRenderable 附加到节点并在 ArFragment 中呈现。
我想用醒目的颜色向用户突出显示此元素 0.5 秒。
我尝试更改 material,但没有成功。渲染冻结而没有抛出错误。这是我尝试过的:
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());
如何更改颜色?
创建 material 是异步的,这就是它 returns CompletableFuture 的原因。您正在调用 CompletableFuture.get(),这是一个阻塞调用,但由于您在 UI 线程上,它最终冻结了应用程序。 如果您将设置移动到 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);
});
}