我的 .obj 模型是白色的,即使我附加了一个 .mtl 文件

My .obj model is white even though I attached an .mtl file to it

我正在 three.js 工作,我正在尝试导入一个 .obj 文件及其对应的 mtl 文件。 mtl 文件引用的纹理是 .bmp,所以我调整了 mtl 文件以指向所有 .dds 文件并将我所有的资产转换为 dds。问题是它只是渲染白色纹理。我不确定它是否相关,但它说不支持 PVRTC 压缩纹理。 这是我用于 obj/mtl 加载器的代码:

var onProgress = function(xhr) {
  if (xhr.lengthComputable) {
    var percentComplete = xhr.loaded / xhr.total * 100;
    console.log(Math.round(percentComplete, 2) + '% downloaded');
  }
};
var onError = function(xhr) {};
THREE.Loader.Handlers.add(/\.dds$/i, new THREE.DDSLoader());
var loader = new THREE.OBJMTLLoader();
loader.load('assets/FirstPersonExampleMap.obj', 'assets/FirstPersonExampleMap.mtl', function(object) {
  object.position.y = 0;
  scene.add(object);
}, onProgress, onError);

这是我调整后的 .mtl 文件的示例:

newmtl assets/M_WhiteEditQuarter_M_WhiteEditQuarter
 map_Kd M_WhiteEditQuarter_M_WhiteEditQuarter_D.dds
 map_Ks M_WhiteEditQuarter_M_WhiteEditQuarter_S.dds
 bump M_WhiteEditQuarter_M_WhiteEditQuarter_N.dds

.mtl 目录中对纹理的引用应与 html 文件所在的位置有关。所以 .mtl 应该是这样的:

newmtl M_WhiteEditQuarter_M_WhiteEditQuarter
    map_Kd assets/M_WhiteEditQuarter_M_WhiteEditQuarter_D.dds
    map_Ks assets/M_WhiteEditQuarter_M_WhiteEditQuarter_S.dds
    bump assets/M_WhiteEditQuarter_M_WhiteEditQuarter_N.dds

newmtl 只是一个名称,因此不必以 assets 作为前缀。其余的是您的纹理的实际路径。

更新 1

总评:你的模型很大。那是一回事。另一个是您使用了很多 1x1 纹理。为什么?他们造成了很多延误。第三个问题是你的纹理也很大。对于您的漫反射纹理,可以吗?但是您的法线贴图没有这样的细节来保证它们采用 space。

回到问题

正在查看您的 bmp 版本;您的 .obj 和 .mtl 文件需要修复。正如我所说 newmtl 只是一个名称,因此它不必以路径为前缀。但是您的 .obj 和 .mtl 文件之间存在不一致。在一个文件中 newmtl 是路径前缀,而在另一个文件中则不是。因此,当加载 .obj 时,它永远不会找到 materials。所以一旦我修复了纹理,我就会出现。

在一种情况下,mtl 定义 FirstPersonExampleMap_FirstPersonExampleMap_PersistentLevel_SkySphereBlueprint_Sky Sphere mesh_MaterialInstanceDynamic_3 中包含 space。我不确定这是否有效。

我用来查看更改的工具是 http://www.finalmesh.com/

注意: 看起来你的世界是一个大球体,而且你的教堂周围也有一些元素实际上是白色的。在显示 material 之前,我不得不放大很多。

http://imgur.com/JtQcT2u

http://imgur.com/UwfD0Rb