ThreeJS:运行时材质更新

时间:2021-05-19 12:33:14

标签: javascript three.js 3d

我正在将带有材质文件 (MTL) 的 OBJ 对象加载到场景中,效果很好。 MTL 文件指向对象的 JPG 纹理,我在运行时对其进行了可视化修改。

现在我想用新材料(修改后的 JPG)重新加载对象。我可以移除整个对象并将其添加到场景中,但这在性能方面并不是最佳的。

有没有办法只重新渲染具有新纹理的对象或重新附加更新的 MTL?

mtlLoader.load("material.mtl", function (materials) {
materials.preload();
objLoader.setMaterials(materials);
objLoader.setPath("static/models/");
objLoader.load("object.obj", function (object) {
  scene.add(object);
});

1 个答案:

答案 0 :(得分:1)

一旦对象已经在您的场景中,您就不需要重新加载它。只需找到材料,然后change its .map property

var textureLoader = new THREE.TextureLoader();
var newTexture = textureLoader.load('./path/to/new/image.png');
object.material.map = newTexture;

您可以使用内置的 TextureLoader class 加载新纹理。