为啥 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”中的相机位置变化