可以三个JS colladaLoader加载ZAE文件吗?

时间:2018-02-13 13:44:29

标签: javascript three.js collada

我正在尝试使用ThreeJS来加载collada文件,我已经在他们的演示部分复制了代码。它似乎加载.dae文件很好,即使它们在其他文件中有纹理。不幸的是,我需要加载一个包含纹理的文件。

看起来.zae文件是前进的方式但是当我尝试加载一个时,我得到一个空白屏幕和一个控制台错误:

Uncaught TypeError: Cannot read property 'getAttribute' of undefined

调试器显示它发生在colladaLoader.js包中的以下行

var version = collada.getAttribute( 'version' );

这是因为.zae文件不受支持还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

不,默认的ColladaLoader无法做到这一点。

但是从浏览collada specification(第20页)开始,应该可以编写一个基于(或使用)可以处理zae文件的ColladaLoader的加载器。

这样的事情:

  • 加载文件并解压缩(其他加载器正在使用JSZip,例如THREE.KMZLoader
  • 解析归档中的manifest.xml以从<dae_root>元素获取主.dae文件名。
  • 使用普通THREE.ColladaLoader
  • 解析.dae文件
  • 加载器将尝试直接加载纹理(使用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;
      });