移动端利用OpenGL展示3D模型文件STL

移动端利用OpenGL展示3D模型文件STL

突然发现上次写博客都是一年前了,没养成分享的习惯挺郁闷的,所以分享下个人感觉好玩的东西吧。纯理工科生笔杆子不硬,写的不好,哪里有看不懂的或者写的不好的希望指正讨论。

为了大家有兴趣看下去加点成果图:(本想着录个屏,各种软件都不好使,要是有好的录屏软件求推荐)
个人喜欢这个
愤怒的小鸟

首先我们要掌握以下几个问题

一:什么是STL文件?

stl 文件是在计算机图形应用系统中,用于表示三角形网格的一种文件格式。 它的文件格式非常简单, 应用很广泛。
STL是最多快速原型系统所应用的标准文件类型。STL是用三角网格来表现3D CAD模型。
详细请查询——[百度百科]

实际上我们所要关注只不过是STL的两种展示形式

1.ASCII格式

ASCII码格式的STL文件逐行给出三角面片的几何信息,
每一行以1个或2个关键字开头。
在STL文件中的三角面片的信息单元 facet 是一个带矢量方向的三角面片,STL三维模型就是由一系列这样的三角面片构成。
整个STL文件的首行给出了文件路径及文件名。
在一个 STL文件中,每一个facet由7 行数据组成,
facet normal 是三角面片指向实体外部的法矢量坐标,
outer loop 说明随后的3行数据分别是三角面片的3个顶点坐标,3顶点沿指向实体外部的法矢量方向逆时针排列。
ASCII格式的STL 文件结构如下:

明码://字符段意义
solidfilenamestl//文件路径及文件名
facetnormalxyz//三角面片法向量的3个分量值
outerloop
vertexxyz//三角面片第一个顶点坐标
vertexxyz//三角面片第二个顶点坐标
vertexxyz//三角面片第三个顶点坐标
endloop
endfacet//完成一个三角面片定义

......//其他facet

endsolidfilenamestl//整个STL文件定义结束
2.二进制格式

二进制STL文件用固定的字节数来给出三角面片的几何信息
文件起始的80个字节是文件头,用于存贮文件名;
紧接着用 4 个字节的整数来描述模型的三角面片个数,
后面逐个给出每个三角面片的几何信息。每个三角面片占用固定的50个字节,依次是:
3个4字节浮点数(角面片的法矢量)
3个4字节浮点数(1个顶点的坐标)
3个4字节浮点数(2个顶点的坐标)
3个4字节浮点数(3个顶点的坐标)个
三角面片的最后2个字节用来描述三角面片的属性信息。
一个完整二进制STL文件的大小为三角形面片数乘以 50再加上84个字节。
二进制:

UINT8//Header//文件头
UINT32//Numberoftriangles//三角面片数量
//foreachtriangle(每个三角面片中)
REAL32[3]//Normalvector//法线矢量
REAL32[3]//Vertex1//顶点1坐标
REAL32[3]//Vertex2//顶点2坐标
REAL32[3]//Vertex3//顶点3坐标
UINT16//Attributebytecountend//文件属性统计

二:怎么解析STL文件?

文件的格式比较大 数据包含二进制和ASCII的格式 所以我将文件以字节的形式进行读取

    inputStream = context.getContentResolver().openInputStream(uri);
    stlBytes = IOUtils.toByteArray(inputStream);

IOUtils 只是个读取字节文件的工具类 具体实现我就不在这里展示了 之后会附上可用的源码到时下下来看就行了 ,如果你等不及想直接看 也可以点击这里——[github源码]

获取到字节文件后 就要判断是ASCII还是二进制的
/**
     * checks 'text' in ASCII code
     * 
     * @param bytes
     * @return
     */
    boolean isText(byte[] bytes) {
        for (byte b : bytes) {
            if (b == 0x0a || b == 0x0d || b == 0x09) {
                // white spaces
                continue;
            }
            if (b < 0x20 || (0xff & b) >= 0x80) {
                // control codes
                return<
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: STL 文件是三维模型的标准格式之一,可以使用各种三维打印软件将其分层切割并输出横截面图片。首先,需要打开 STL 文件并使用软件的分层工具进行切割,然后可以使用软件的截图工具进行截图,最后导出为图片文件。 ### 回答2: 3D模型STL文件是一种常见的三维模型文件格式。要进行分层切割并输出横截面图片,需要借助专门的3D建模软件或库来实现。 首先,我们需要选择一款适用于STL文件3D建模软件。常见的软件包括SolidWorks、AutoCAD等。打开软件后,导入STL文件并加载模型。 接下来,我们需要进行分层切割操作。这个过程旨在将三维模型按照不同的高度分成多个横截面,并输出对应的图片。在3D建模软件中,通常会提供相应的切片工具。我们可以选择切割平面(或平行于x/y/z轴)并设置切割的高度。可以通过移动切割平面、调整切割高度或增加/删除切割面来实现对模型的切割。重复操作直到将整个模型切割完毕。 切割完毕后,我们可以逐层导出横截面图片。在软件中找到导出图片的选项,选择要导出的图片格式(如JPEG、PNG等)和保存路径。然后依次选择每个切割面所在的层并导出对应的图片。可以为每个图片设置合适的命名方式,以便日后使用或整理。 通过上述步骤,我们可以实现对3D模型STL文件的分层切割并输出横截面图片。这些横截面图片在许多应用中具有很高的实用性,比如用于快速原型打印、医学成像、工程制图等。随着3D技术的发展,相关软件和方法也在不断更新和完善,提供更多的功能和便捷性。 ### 回答3: 在3D建模领域,STL文件是一种常用的文件格式,用于表示三维模型的几何信息。STL文件中存储了模型的表面信息,而与模型内部结构无关。然而,有时候我们需要对模型进行分层切割,并将每个切片的横截面输出为图片。 分层切割是指将3D模型沿着一个平面切割成多个平行的切片。这样做的好处是可以更好地了解模型的内部结构,并进行进一步分析。为了进行分层切割,我们需要选择一个平面,并将它逐渐平移,直到与模型相交。通过不断平移和相交,我们可以得到一系列的切片。 一旦我们得到了这些切片,我们可以使用相应的软件工具,如基于计算机辅助设计(CAD)的软件、切片软件等,将每个切片的横截面输出为图片。这些图片可以展示每个切片的具体几何形状,并提供更直观的信息。此外,通过将这些横截面图片进行叠加,我们可以还原出完整的3D模型。 要注意的是,进行3D模型的分层切割和输出横截面图片需要一定的专业知识和工具支持。对于普通用户来说,可能需要学习相关软件的使用方法,以及了解3D建模和切割的原理。而对于专业人士来说,他们可以根据实际需求选择最适合的工具,并利用相关算法和技术进行更加精确和高效的分层切割和横截面图片输出。 总结起来,通过3D模型STL文件的分层切割和输出横截面图片,我们可以更好地了解模型的内部结构,并为后续的分析和应用提供准确的数据基础。这在3D建模、制造、医学等领域都具有重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值