问题 如何从three.js中的OBJ + MTL文件加载纹理?


我有一个Maya文件导出到OBJ和MTL。我可以成功看到OBJ纹理,但我如何实际获得纹理?我在搅拌机中查看了“three.js”格式,它看起来只是形状,没有纹理。

这个 three.js的例子 似乎加载了obj罚款的形状,但纹理似乎来自jpg图像而不是mtl:

loader.load('textures/ash_uvgrid01.jpg', function(image) {
    texture.image = image;
    texture.needsUpdate = true;
});

我的问题是,如何为我的模型获得这个“uvgrid01.jpg”图像?有没有办法将MTL转换为仅用于纹理的.jpg格式?或者是否有其他方法我应该导出纹理以便能够加载它?


4732
2017-07-18 01:07


起源



答案:


你可以使用OBJLoader和MTLLoader,如图所示 这个例子 (至少three.js r77):

var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath('obj/male02/');
mtlLoader.load('male02_dds.mtl', function(materials) {
  materials.preload();
  var objLoader = new THREE.OBJLoader();
  objLoader.setMaterials(materials);
  objLoader.setPath('obj/male02/');
  objLoader.load('male02.obj', function(object) {
    object.position.y = -95;
    scene.add(object);
  }, onProgress, onError);
});

13
2017-07-18 14:47



不幸的是,正如OBJMTLLoader一样,这已不再适用 去除 来自THREE.js - nachteil
@nachteil它分为2个加载器,示例已更新。 - approxiblue
谢啦!寻找合适的装载机几个小时。 - Jan Kuri


答案:


你可以使用OBJLoader和MTLLoader,如图所示 这个例子 (至少three.js r77):

var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath('obj/male02/');
mtlLoader.load('male02_dds.mtl', function(materials) {
  materials.preload();
  var objLoader = new THREE.OBJLoader();
  objLoader.setMaterials(materials);
  objLoader.setPath('obj/male02/');
  objLoader.load('male02.obj', function(object) {
    object.position.y = -95;
    scene.add(object);
  }, onProgress, onError);
});

13
2017-07-18 14:47



不幸的是,正如OBJMTLLoader一样,这已不再适用 去除 来自THREE.js - nachteil
@nachteil它分为2个加载器,示例已更新。 - approxiblue
谢啦!寻找合适的装载机几个小时。 - Jan Kuri