0

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

材料只是颜色:

newmtl Steel__-_Satin

Kd 0.627451 0.627451 0.627451

我想避免:

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

提前致谢!

4

1 回答 1

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 文件的“参数”块,您可以了解 sfb 中存在哪些材料参数。您还可以使用自己的材质参数编写自定义材质,并使用它来控制 sfb 在运行时的外观和感觉。

于 2018-08-02T17:55:12.740 回答