将大型json模型加载到three.js应用程序中
我正在尝试将构build模型加载到three.js中。 模型的格式是由RvtVa3c生成的JSON文件,它是Revit生成JSON输出的附件。 然后,我使用THREE.ObjectLoader()
将模型加载到three.js中,就像本例中的json loader three.js一样 。
一切都很好,模型的大小低于100MB。 当我试图加载一个200MB的模型时,Chrome会抛出“Aw,snap”的错误页面。 而且Firefox会引发分配大小溢出。 因为THREE.ObjectLoader()
使用XHR将json文件一次读入String,我猜String的大小对于java脚本来说是很大的。 String的长度超过2亿,JSON为100MB。
所以我正在寻求通过stream加载JSON文件的方式。 Node.js中的JSONStream
可以处理200MB的JSON。 代码示例如下所示。
var fs = require('fs'), JSONStream = require('JSONStream'), es = require('event-stream'); var getStream = function () { var jsonData = 'buildingModel.js', stream = fs.createReadStream(jsonData, {encoding: 'utf8'}), parser = JSONStream.parse('*'); return stream.pipe(parser); }; getStream() .pipe(es.mapSync(function (data) { console.log(data); }));
由于浏览器不能使用require(/module/)
。 我试着用JSONStream
把JSONStream
捆绑到我的代码中。 但是, fs
不能被浏览。
这是我的问题:
- 使用stream最好的方式来加载three.js中的极大的JSON模型? 如果不是,那么更好的解决scheme是什么?
-
fs
可以被浏览。 或者我可以用其他方式在浏览器中创build可读的stream?
谢谢你回答我的问题。