运行AR活动时可以更新.sfb文件吗?

时间:2018-07-17 21:33:51

标签: android android-studio augmented-reality arcore sceneform

使用SceneForm,我正在显示一个3D对象,该对象是从外部存储的SFB文件中获取的,并且需要更改其颜色。有没有办法修改文件以更改其颜色?

材料只是颜色:

newmtl Steel _-_ Satin

Kd 0.627451 0.627451 0.627451

我想避免:

  • 在外部存储库中为每种颜色存储一个文件。不仅不切实际,而且每次需要更改颜色时我都必须下载一个新文件(可能很大),这可能很乏味。
  • 必须存储1个OBJ和几个MTL文件,并且每次都要创建一个新的SFB。和以前一样,我将不得不存储更少的数据,但是颜色更新的时间将更长。

谢谢!

1 个答案:

答案 0 :(得分:0)

一种在运行时设置可渲染颜色的方法是通过更改“ baseColorTint” 材质参数。以下是如何着色可渲染红色的示例:

renderable.getMaterial().setFloat4("baseColorTint", new Color(1.0f, 0.0f, 0.0f, 1.0f));

此外,如果您希望将每个可渲染对象的多个副本设置为不同的颜色,则可以执行以下操作:

Renderable tintedRenderable = originalRenderable.makeCopy();
tintedRenderable.getMaterial().setFloat4("baseColorTint", new Color(1.0f, 0.0f, 0.0f, 1.0f));

注意,这可以通过乘以来自对象纹理的“ baseColor” 来实现。如果对象在着色之前是纯白色的,则效果最好。

此外,不同的sfb可以具有不同的材料参数集。通过查看.sfa文件的“ parameters”块,您可以了解sfb中存在哪些材料参数。您还可以编写带有自己的材料参数的custom material,并使用它来控制sfb在运行时的外观和感觉。