用Blender导出了json格式的模型,如果导出时加了scene,用THREE.ObjectLoader()进行加载,不报错,无警告,但页面白板,没有模型。
如果导出时没有添加scene,用THREE.JSONLoader()进行加载,总提示错误
Uncaught TypeError: Cannot read property 'length' of undefined
at parseModel (three.js:36302)
at JSONLoader.Object.assign.parse (three.js:36710)
at Object.onLoad (three.js:36233)
at XMLHttpRequest.<anonymous> (three.js:30794)
错误行代码在three.js里:zLength = vertices.length;
但是json里根本没有 vertices这一项
是不是导出时设置有问题
mrdoob commented on 12 Feb 2014
That file seems to be a Scene. You should be using |
具体链接在如下,google搜索的
https://github.com/mrdoob/three.js/issues/4420
看看是不是你要的。
刚才单步调试,发现模型已经都已经加载到场景了,但是界面上没有显示。
我在想会不会是Blender导出的模型全透明,但是也没有设置这一项
@我心悦你: 不好意思,我不是干这行的,three.js我是有兴趣去折腾一下,不过还没开始。
我分析一下,你说的有一定的道理,加载如果都成功而无报错,无显示是有可能因为模型透明造成的。
我有几个建议,纯属瞎猜,如果是透明的,你看看能不能将three.js的背景设置成有色的,以证明模型是透明的。二,尝试网上别人做好的素材导入,以确认不是代码的问题。
@yhdino: 谢谢,我单步调试发现load()函数中的回调执行完模型是加载到场景的,但是在渲染之前还执行一些three.js中的代码,执行完后模型就不在场景里了。所以我在回调函数最后写了场景渲染的代码,模型成功加载,但是总觉得这种方法太不主流了,下面是我的代码
var loader=new THREE.ObjectLoader();
loader.load("ifc2.json",function(object){
console.log(object.children);
/*for(var i=0;i<object.children.length;i++){
scene.add(object.children[i]);
}*/
scene=object;
scene.add(spotLight);
document.body.appendChild(renderer.domElement);
renderer.render(scene, camera);
});