STEP、IGES、STL各类3D模型转换为适用Web的glb,gltf格式并压缩

  • 格式介绍
    • STEP和IGES格式
    • STL格式
    • GLTF格式
  • 输出GLTF格式的思路
    • 环境安装
    • 实现转换(方法1)
      • pythonocc读取转换STP/IGS/STL
      • stl2gltf(将STL转换为GLTF)
    • 实现转换(方法2)
      • 使用在线转换网址得到GLB文件
    • GLB文件压缩
  • 总结

格式介绍

STEP和IGES格式

简单来说,这俩都是CAD的一种文件标准,STEP比IGES出现得更晚一些,由于IGES格式的最新版本是96年发布的,现在多由更高效的STEP等新格式替代,不支持材质。
IGES 可以安装 iges viewer 免费工具查看。下载链接:https://igsviewer.com/download.aspx

但是,现行主流的web3d库,比如 three.js、Babylon 均不支持 STEP 和 IGES 模型,需要解决这个问题有两个思路:

  • 深入了解格式含义,编写代码给对应库提交对应的解析方案(想法很好,但是实践不易)
  • 将格式转换为适合web展示的格式,比如称为3d界JPG的 GLTF 格式(本文就是讲这个的)

STL格式

STL格式更多出现在3D打印中,只能用来表示封闭的体或者面,且文件内部都用三角形表示,所以转换精度比较粗的话,看起来效果比较诡异,包括 Ascii 编码和二进制两种编码模式,一般采用二进制,因为体积相对较小,并且与STEP和IGES一样不支持材质
比如同一个模型(STEP大小:4.81M),转换精度不同可能就是如下两种效果
粗精度(Ascii编码:3.7M);细精度(Ascii编码:63.3M,二进制编码:12.1M)

GLTF格式

简单来说,就是最小化的把模型资源整理起来,称为3d模型界的JPG,支持材质贴图等,在各个Web3D库中得到了广泛支持,具体怎么加载这里就不赘述了,网上demo很多

Github上的格式介绍和相关技术汇总 https://github.com/mrdoob/three.js/pull/14308
GLTF的详细介绍中文资料: https://zhuanlan.zhihu.com/p/65265611

输出GLTF格式的思路

使用 pythonocc 将 STEP/IGES/Ascii的STL文件 统一转换为二进制模式的 STL,
再使用 stl2gltf 将STL转换转换为 gltf 格式,
最后使用 gltf-pipeline 将glb文件压缩输出即可

环境安装

  • pythonocc环境
    Pythonocc是python的CAD,安装和使用都很方便,转换脚本简单明了

    • 下载并安装AnaConda
      https://www.anaconda.com/distribution/#download-section
    • 创建 pythonocc 环境
      在 Anaconda Prompt 中执行安装命令
      conda create -n pythonocct -c dlr-sc -c pythonocc pythonocc-core=7.4.0rc1
  • gltf-pipeline环境
    • 下载并安装nodejs
      https://nodejs.org/zh-cn/
    • 安装gltf-pipeline
      npm install -g gltf-pipeline

实现转换(方法1)

pythonocc读取转换STP/IGS/STL

  • 在 Anaconda Prompt 中执行进入环境命令
    activate pythonocct
  • STP转换为 STL 文件(StpConverter.py)
    import os
    from OCC.Extend.DataExchange import read_iges_file,read_step_file,write_stl_fileinput_file = 'temp2.stp'
    output_file = 'out.stl'
    if not os.path.exists(input_file):print('Input file need exists')exit()shapes=read_step_file(input_file)
    write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
    
  • IGES转换为 STL 文件(IgsConverter.py)
    import os
    from OCC.Extend.DataExchange import read_iges_file,read_step_file,write_stl_fileinput_file = 'temp2.igs'
    output_file = 'out2.stl'
    if not os.path.exists(input_file):print('Input file need exists')exit()shapes=read_iges_file(input_file)
    write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
    

stl2gltf(将STL转换为GLTF)

将二进制模式的 STL 文件转换为 GLTF 文件,支持浏览器本地转换、Python脚本以及C++源码

  • stl2gltf.py
  • 执行转换命令
    python stl2gltf.py out.stl out.glb -b

实现转换(方法2)

使用在线转换网址得到GLB文件

3D模型在线转换

GLB文件压缩

直接转换出来的 glb 文件可能比较大,对于WEB来说还是太大了,需使用 gltf-pipeline 进行文件压缩

  • 执行压缩命令
    gltf-pipeline -i out.glb -o out.glb -b -d
  • glb/gltf格式模型文件压缩–gltf-pipeline相关参数说明

总结

初次接触经验不足,欢迎批评指正,感谢「藏锋入鞘」的文章引导!

本文参考CSDN博主「藏锋入鞘」的原创文章,原文链接:https://blog.csdn.net/qq_34177812/article/details/104726405

STEP、IGES、STL各类3D模型转换为适用Web的glb,gltf格式并压缩相关推荐

  1. STEP和IGES模型转换为适用Web的glb格式

    文章目录 前言 正文 基于本文做的开源项目 了解STEP和IGES格式 了解STL格式 为何不统一转换为stl格式? CTM格式 GLTF格式 现有的在线转换服务 网上现有轮子能针对这个格式做哪些转换 ...

  2. PROE CREO 各类3D模型图档大全-8.2G

    PROE CREO 各类3D模型图档大全-8.2G 链接:https://pan.baidu.com/s/1RCUhicPQY-yrR3kO71olOQ 提取码:ead3

  3. Kicad如何导入封装库、符号库(元件库)以及3D模型文件?

    简介 Kicad自带了一些基础的符号库,但是如果我们想使用的一些指定类型的元器件不在其中怎么办? 我们可以去一些开源的符号官网中去下载并导入到Kicad中就可以了,如果你使用的是指定厂家的元器件那么理 ...

  4. Streamlit如何展示3D模型?

    Streamlit 是一个非常好的创建 web demo 的库,但是对于单目深度估计很难找到可以展示 3D 模型的东西. 正如我刚刚在 Jupyter Notebook 中使用 obj2html 库可 ...

  5. Cesium.js 加载3D模型

    一.Cesuimjs介绍 Cesiunjs是一套GIS行业中进行地图渲染的js库,该库使用的WebGL进行地图渲染.并且结合HTML5进行相应,从而实现3D中渲染地图.本篇文章则介绍如何将后缀名为ma ...

  6. threejs加载3D模型例子

    加载3D模型 首先要引入ColladaLoader加载器,Collada是一个3D模型交换方案,即不同的3D模型可以通过Collada进行相互转换,言外之意,threejs可以使用Collada将3D ...

  7. Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)

    转自:http://blog.csdn.net/junzia/article/details/58272305 在Android OpenGLES2.0(十四)--Obj格式3D模型加载中实现了Obj ...

  8. threejs加载3D模型

    加载3D模型 首先要引入ColladaLoader加载器,Collada是一个3D模型交换方案,即不同的3D模型可以通过Collada进行相互转换,言外之意,threejs可以使用Collada将3D ...

  9. 必备 免费Iges(Igs) 3d模型素材网站

    最近看到很多朋友吐槽Iges(Igs) 3d模型素材不好找,有时花了大把时间却没找到合适的,而且有的时候会涉及到版权问题,付费问题等,不仅工作效率降低,还闹心郁闷,所以今天就给大家分享一下小编自己在亲 ...

最新文章

  1. python哪个版本好-python应该学习哪个版本
  2. 使用logrotate分割tomcat日志
  3. 数字图像基础,论坛,算法库matlab,opencv,halcon
  4. 《java练习题》习题集二
  5. Python守护进程和脚本单例运行
  6. 广西高考成绩查询2021,2021年广西高考个人排名怎么查询,广西高考成绩排名查询方法...
  7. jq之$(“a[target=‘_blank‘]“)
  8. php备份mysql页面_如何用PHP的页面备份、恢复Mysql数据库_php
  9. php soap 两个版本_Ceontos 安装php7以上的版本
  10. 2021教师资格证中学科目二简答汇总分享
  11. 小样本点云深度学习库_NeurIPS2019 | MIT与上海交大提出新型点云深度学习框架Point-Voxel CNN...
  12. 盒子模型(W3C盒子和IE盒子)
  13. Sql根据不同条件统计总数
  14. vb caption 换行
  15. selenium下载和安装
  16. java输入身高体重计算体脂率_追求健康的体脂率,比追求体重数更有意义:一个公式教你计算...
  17. 理解Base64编码及实现编解码Base64
  18. 马云:我肯定是12x12,你们却在纠结不能996
  19. mongo 登陆_MongoDB 账号密码登录
  20. BZOJ2901: 矩阵求和

热门文章

  1. 响应式实例-兰途科技(jq)
  2. 06_《计算机安全原理与实践》访问控制
  3. ai2023 mac版 ai2023中文版(支持m1)全新功能
  4. 资源3(ZY3)号卫星三线阵数据制作DEM
  5. Vue实现集成使用第三方Animate.css动画库详细教程(解决鼠标移入移出闪烁问题)
  6. WIN10鼠标指针在等待状态下出现重影、假影、虚影,、显示错误的问题。
  7. 流式凋亡率计算_流式细胞术检测细胞凋亡问题
  8. TN3399将固态硬盘设置成根目录
  9. 【风控模型方法论】利用系数符号、VIF和IV快速挑选模型变量
  10. 华强北耳机值得买吗?深度解析络达三代1562A系列耳机, 90%的人不知道。