Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ThreeJS:运行期间的材质更新_Javascript_Three.js_3d - Fatal编程技术网

Javascript ThreeJS:运行期间的材质更新

Javascript ThreeJS:运行期间的材质更新,javascript,three.js,3d,Javascript,Three.js,3d,我正在将一个带有材质文件(MTL)的OBJ对象加载到场景中,效果非常好。MTL文件指向对象的JPG纹理,我在运行时对其进行了可视化修改 现在我想用新材质(修改的JPG)重新加载对象。我可以移除整个对象并将其添加到场景中,但就性能而言,这并不是最优的 有没有办法只重新渲染带有新纹理的对象或重新附加更新的MTL mtlLoader.load("material.mtl", function (materials) { materials.preload(); objLoader.

我正在将一个带有材质文件(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);
});

一旦对象已经在场景中,就不需要重新加载该对象。只要找到材料,然后

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

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

到目前为止,这是可行的,但我遇到了一个问题,因为它会覆盖整个纹理。我有不同的模型(OBJ和MTL)以不同的方式共享相同的JPG纹理文件。材质文件和JPG保持不变,只是JPG会有视觉变化。有没有办法重新加载/刷新对象的材质?我不知道你想做什么。可以使用
object.material.property=newValue
更新对象的材质,也可以使用
object.material=new THREE.MeshXXXMaterial()指定新材质你选择的材料类型取决于你,有基本的、标准的、Phong的、卡通的等等……让我简化一下。我有一个3D obj模型,在我的本地主机网站上加载了一个材质文件和一个jpg纹理,可以正常工作。现在,我在Photoshop中将一个徽标添加到jpg纹理ie中,并将其保存在同一文件下。我现在如何更新模型并查看更新后的jpg纹理?我非常感谢您的反馈。快速提问,这可能会解决我的问题。如何在之后(即,在对象已加载到场景中之后)将材质(MTL)应用于对象?