我正在使用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

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