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

时间:2015-06-05 20:11:37

标签: three.js .obj dds-format

我正在使用three.js,而我正在尝试使用相应的mtl文件导入.obj文件。 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




1 个答案:

答案 0 :(得分:1)

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

newmtl

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

更新1

一般评论:你的模特很大。这是一回事。另一个是你使用了很多1x1纹理。为什么?他们造成了很多延迟。第三个问题是你的纹理也非常大。你的漫反射纹理还可以吗?但是你的普通地图没有这样的细节来保证他们占用的空间。

回到问题

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

同样在一种情况下,mtl定义Windows.Web.Http.Filters.HttpBaseProtocolFilter myFilter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter(); var cookieManager = myFilter.CookieManager; HttpCookieCollection myCookieJar = cookieManager.GetCookies(new Uri("target URI for WebView")); foreach (HttpCookie cookie in myCookieJar) { cookieManager.DeleteCookie(cookie); } 中包含空格。我不确定这是否有效。

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

注意:看来这是一个围绕你的世界的大球体,而且教堂周围的元素实际上是白色的。在得到材料展示之前,我不得不放大。

http://imgur.com/JtQcT2u

http://imgur.com/UwfD0Rb