Three.js - 大型网格的 BinaryLoader 与 BufferGeometry?

Posted

技术标签:

【中文标题】Three.js - 大型网格的 BinaryLoader 与 BufferGeometry?【英文标题】:Three.js - BinaryLoader vs. BufferGeometry for large meshes? 【发布时间】:2013-05-23 19:17:51 【问题描述】:

我正在寻找一种将大型多边形网格(最多 1M 三角形)加载到 Three.js 的最有效方法。我正在考虑使用THREE.BufferGeometry 对象或使用THREE.BinaryLoader 加载。我的问题是:

BinaryLoader.js 是否在下面创建THREE.BufferGeometry 对象?或者它是否创造了同样有效的东西? 如果没有,有没有人推荐使用哪一个?

一些附加信息:

我的模型在服务器上是专有格式,所以无论如何我都需要对它们进行转换/编码。 我还没有找到一个可以创建THREE.BufferGeometry 的 Three.js 加载器。看来我需要自己写。但我可以在服务器端准备数据以与THREE.BufferGeometry 结构对齐。 BinaryLoader.js 提供加载数据所需的所有基础设施,但需要在服务器端以特殊方式准备数据。

【问题讨论】:

CTMLoader 在参数参数useBuffers: true 指示时创建 BufferGeometry @gaitat - 谢谢!这带来了另一种选择。 OpenCTM 是否仍在开发中?我在过去 15 个月内没有看到任何更新。另一种选择可能是webgl-loader,尽管我不确定 Three.js 支持是否仍然是最新的。我希望我有时间比较所有这些选择...... 我认为 OpenCTM 已经完成了它应该做的事情,所以不需要更新。 webgl-loader 也是在three.js 的UTF8Loader() 中实现的,同样支持BufferGeometry 参数。此外,OpenCTM 还支持 WebWorkers。 @gaitat - 再次感谢!我会同时尝试并发布结果。 如果某些评论有用,我将不胜感激(评论左侧) 【参考方案1】:

了解一下 Three.js 的 glTF 格式和 glTFLoader。它使用 BufferGeometry。 性能要好得多;但是,它实现了自己的动画(不使用 THREE.Animation),并且我遇到了一些与 Three.js 相关的问题,例如无法克隆模型(至少开箱即用)

glTF:https://github.com/KhronosGroup/glTF

glTFLoader:https://github.com/mrdoob/three.js/blob/54a1e789c3a84557d6b05782f5cbd9f1064f5e4f/examples/js/loaders/GLTFLoader.js

【讨论】:

以上是关于Three.js - 大型网格的 BinaryLoader 与 BufferGeometry?的主要内容,如果未能解决你的问题,请参考以下文章

three.js - 网格组示例? (THREE.Object3D() 高级)

在three.js中将网格添加到场景之前如何设置网格的位置

Three.js 加载已经三角剖分的网格是不是比使用四边形的网格更高效?

Three.js Raycaster 未检测到场景网格

在three.js中播放特定部分的网格动画

Three.js - 变形几何和细化三角形网格