【问题标题】:Exporting threeJS scene to STL file results to very big file size将 threeJS 场景导出到 STL 文件会导致文件非常大
【发布时间】:2016-01-17 15:10:10
【问题描述】:

我想将我的 threeJS 场景导出到 STL 文件。 我正在使用这个导出器:https://gist.github.com/kjlubick/fb6ba9c51df63ba0951f

我的问题是我得到的文件大小。例如,对于 4 个球体(通过 new THREE.SphereGeometry(1,32, 32) 创建),我有一个 15MB 的文件,如果您认为这里的这个球:http://archive3d.net/?a=download&id=469e26a6 小于 0.5 MB,我认为这个文件很大。

有什么办法可以减小文件大小?为什么只有 4 个球体这么大? 一种方法是在导出时创建一些低分辨率 (new THREE.SphereGeometry(1, 16, 16)) 临时球体,然后将其删除,但还有其他更好的方法吗?

编辑:我在导出过程中犯了一个错误,当我更正它时,大小下降到 6 MB,但对于 2 个球体来说仍然很大。

提前感谢您,任何意见将不胜感激。

【问题讨论】:

标签: javascript three.js filesize exporter


【解决方案1】:

您已链接的导出文件使用ASCII STL format,其本质上非常冗长,并且占用大量字节来存储单个三角形。您的每个球体将由数千个三角形组成。选项是:

  • 使用二进制 STL 文件格式。这是一个更紧凑的表示,每个方面使用 50 个字节。根据信封背面的一些计算*,这将需要每个球体约 0.1MB。 three.js 存储库有一个 binary STL exporter example
  • 降低用于导出数字的数字精度。如果您导出像 0.1 而不是 0.100001 这样的数字,则保存结果所需的字符会更少(但会丢失精度)。
  • 使用较少的三角形来构成问题中讨论的球体。
  • 如果您真的非常迫切地想要使用 ASCII,您也可以尝试删除导出器生成的一些不必要的空格缩进,但这只会带来非常小的改进。

* 假设每个球体有 32 * 32 * 2 个三角形,32 * 32 * 2 * 50 = ~100e3 = ~0.1MB

【讨论】:

  • 感谢您的回答。 1. 二进制 stl 是一个好主意,但没有任何二进制导出器,但我现在正在努力自己开发一个。我错过了任何 js stl bin。出口商? 2. 我试过你的想法,但就尺寸而言,它给我的结果很少
  • 3.我做到了,它真的很有帮助!
  • 4.我并不急于使用 ascii,我只是还没有二进制导出器。
  • @ThanosKw 我在官方three.js 存储库中找到了一个,我将编辑我的答案以包含它。
猜你喜欢
  • 2021-03-15
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多