首页 新闻 会员 周边

three.js加载blender导出的json格式模型

0
悬赏园豆:20 [已解决问题] 解决于 2018-06-06 09:28

用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这一项

是不是导出时设置有问题

我心悦你的主页 我心悦你 | 初学一级 | 园豆:73
提问于:2018-06-05 11:22
< >
分享
最佳答案
0

mrdoob commented on 12 Feb 2014

That file seems to be a Scene. You should be using SceneLoader instead. I'll add a check.

具体链接在如下,google搜索的

https://github.com/mrdoob/three.js/issues/4420

看看是不是你要的。

收获园豆:20
yhdino | 小虾三级 |园豆:701 | 2018-06-05 14:17

刚才单步调试,发现模型已经都已经加载到场景了,但是界面上没有显示。

我在想会不会是Blender导出的模型全透明,但是也没有设置这一项

我心悦你 | 园豆:73 (初学一级) | 2018-06-05 14:42

@我心悦你: 不好意思,我不是干这行的,three.js我是有兴趣去折腾一下,不过还没开始。

我分析一下,你说的有一定的道理,加载如果都成功而无报错,无显示是有可能因为模型透明造成的。

我有几个建议,纯属瞎猜,如果是透明的,你看看能不能将three.js的背景设置成有色的,以证明模型是透明的。二,尝试网上别人做好的素材导入,以确认不是代码的问题。

yhdino | 园豆:701 (小虾三级) | 2018-06-05 14:56

@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);
});

我心悦你 | 园豆:73 (初学一级) | 2018-06-05 20:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册