为啥 Three.js 中的 ColladaLoader.js 无法加载我的文件?

Posted

技术标签:

【中文标题】为啥 Three.js 中的 ColladaLoader.js 无法加载我的文件?【英文标题】:Why can't ColladaLoader.js from Three.js load my file?为什么 Three.js 中的 ColladaLoader.js 无法加载我的文件? 【发布时间】:2018-07-25 14:25:56 【问题描述】:

所以,我正在尝试 three.js,并尝试加载我从 Ark Survival Evolved (Raptor.dae) 找到并下载的 .dae 文件。

我拼凑了一个 html 页面来创建一个带有 raptor 文件、两个灯和一个地板的 webgl 场景;我拼凑了一个烧瓶服务器来提供 html 和资产(直接从 Windows 资源管理器打开 html 会导致我无法弄清楚如何修复的跨源错误,所以我制作了 Web 服务器)。

我知道一切正常,直到它尝试加载这个特定文件,因为我可以让 three.js 附带的演示精灵正确地提供服务。

这是加载 raptor 文件的代码部分。

var raptor
// loading manager
var loadingManager = new THREE.LoadingManager( function() 
    scene.add( raptor );
 );
// collada
var loader = new THREE.ColladaLoader( loadingManager );
loader.load( './static/models/Raptor/Raptor.dae', function ( collada ) 
    raptor = collada.scene;
    raptor.scale.set(0.1,0.1,0.1);
 );
loader.setCrossOrigin( '' );

这是我得到的错误。

Navigated to http://127.0.0.1:5000/raptor
THREE.WebGLRenderer 89
THREE.ColladaLoader: DOMParser: 4.136962890625ms
XHR finished loading: GET "http://127.0.0.1:5000/static/models/Raptor/Raptor.dae".
    load @ three.js:30874
    load @ ColladaLoader.js:25
    (anonymous) @ raptor:47
THREE.ColladaLoader: File version 1.4.1
THREE.ColladaLoader: Parse: 0.06298828125ms
THREE.ColladaLoader: Build: 0.06689453125ms
Uncaught TypeError: Cannot read property 'childNodes' of undefined
    at getElementsByTagName (ColladaLoader.js:62)
    at parseScene (ColladaLoader.js:3333)
    at THREE.ColladaLoader.parse (ColladaLoader.js:3463)
    at Object.onLoad (ColladaLoader.js:27)
    at XMLHttpRequest.<anonymous> (three.js:30794)
getElementsByTagName @ ColladaLoader.js:62
parseScene @ ColladaLoader.js:3333
parse @ ColladaLoader.js:3463
(anonymous) @ ColladaLoader.js:27
(anonymous) @ three.js:30794
XMLHttpRequest.send (async)
    load @ three.js:30874
    load @ ColladaLoader.js:25
    (anonymous) @ raptor:47

这里是错误中提到的两个文件的链接。

three.js

ColladaLoader.js

三个.js 存储库中的elf.dae

Raptor.dae 在 Google 云端硬盘上

我不知道这个文件和elf文件有什么区别。我已经在 Notepad++ 中打开并阅读了它们,但我还没有弄清楚究竟是什么导致了挂起。

任何帮助或指导将不胜感激。

【问题讨论】:

【参考方案1】:

您的 COLLADA 模型在 Blender 中正确加载,所以我认为这是 THREE.ColladaLoader 中的一个错误。您可能希望在 three.js 存储库中提交包含此信息的问题。

同时,使用a blender exporter 转换为glTF 会得到在three.js 中使用的结果,使用THREE.GLTFLoader。

glTF file in Google Drive

在这里预览:https://gltf-viewer.donmccurdy.com/

结果:

【讨论】:

感谢您的意见。我看到 three.js 包含许多其他 3d 文件加载器,我确实考虑过转换文件,但我试图不要轻易放弃让这个特定的加载器工作。我已经看到并拥有其他 dae 格式的视频游戏模型,所以我尽我所能尝试让它发挥作用。在我在网上找不到任何答案的这个特殊的墙土地后,我的想法用完了。我将继续尝试直接询问存储库中的人员。谢谢。 有道理,希望可以解决任何问题。 ?【参考方案2】:

原来是脚本中的bug。它没有完全正确地解析 xml 数据。它将最顶部的骨骼设置为“ID8”而不是“ID9”。 “ID8”指向视觉场景。

【讨论】:

以上是关于为啥 Three.js 中的 ColladaLoader.js 无法加载我的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 为啥带有视口和剪刀的渲染器和我有一个完整的黑色画布

Three.js 中的“THREE.OrbitControls”中的相机位置变化

three.js 中的光

Three.js 中的 BoxBufferGeometry 与 BoxGeometry 有啥区别?

three.js 中的工具提示

动画 GIF 作为 THREE.js 中的纹理