三JS colladaLoader 可以加载ZAE文件吗?
Posted
技术标签:
【中文标题】三JS colladaLoader 可以加载ZAE文件吗?【英文标题】:Can Three JS colladaLoader load ZAE files? 【发布时间】:2018-07-23 21:48:49 【问题描述】:我正在尝试使用 ThreeJS 来加载 collada 文件,并且我已经在他们的演示部分复制了代码。它似乎可以很好地加载 .dae 文件,即使它们在其他文件中有纹理。不幸的是,我需要加载一个包含纹理的文件。
看起来 .zae 文件是前进的方向,但是当我尝试加载一个时,我得到一个空白屏幕和一个控制台错误:
Uncaught TypeError: Cannot read property 'getAttribute' of undefined
调试器显示它发生在 colladaLoader.js 包中的以下行
var version = collada.getAttribute( 'version' );
这是因为 .zae 文件不受支持还是我做错了什么?
【问题讨论】:
您有示例 .zae 文件吗?从我最初的研究来看,.zae 文件似乎只是 zip 档案,但我不确定它们包含哪些文件。 【参考方案1】:不,默认的 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;
);
【讨论】:
不客气!如果您确实构建了它,请考虑提出拉取请求 :)以上是关于三JS colladaLoader 可以加载ZAE文件吗?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Three.js 中的 ColladaLoader.js 无法加载我的文件?
three.js 图像纹理渲染为颜色(使用 ColladaLoader 加载)
ColladaLoader2.js - 随机颜色覆盖 .dae 文件设置 (three.js)
ColladaLoader TypeError: THREE.LoaderUtils 未定义
Mr.Doob在github的examples文件夹中给出的ColladaLoader.js和ColladaLoader2.js有啥区别?