我正在尝试使用ThreeJS来加载collada文件,我已经在他们的演示部分复制了代码。它似乎加载.dae文件很好,即使它们在其他文件中有纹理。不幸的是,我需要加载一个包含纹理的文件。
看起来.zae文件是前进的方式但是当我尝试加载一个时,我得到一个空白屏幕和一个控制台错误:
Uncaught TypeError: Cannot read property 'getAttribute' of undefined
调试器显示它发生在colladaLoader.js包中的以下行
var version = collada.getAttribute( 'version' );
这是因为.zae文件不受支持还是我做错了什么?
答案 0 :(得分:2)
不,默认的ColladaLoader无法做到这一点。
但是从浏览collada specification(第20页)开始,应该可以编写一个基于(或使用)可以处理zae文件的ColladaLoader的加载器。
这样的事情:
THREE.KMZLoader
)manifest.xml
以从<dae_root>
元素获取主.dae文件名。THREE.ColladaLoader
加载器将尝试直接加载纹理(使用textureLoader.load()
),因此您需要向ColladaLoader提供THREE.LoadingManager
,以便从归档中返回图像。这可以通过为LoadingManager指定一个'url-modifier'函数来完成:
Blob
实例将blob的object-url作为已解析的URL返回(请参阅URL.createObjectUrl()
)。
例如:
THREE.DefaultLoadingManager.setURLModifier(url => {
if (existsInArchive(url)) {
return URL.createObjectUrl(new Blob([getFromArchive(url)]));
}
return url;
});