Research on Fast Compression Algorithms and Visualization of STL

Page 1

Electrical Engineering and Automation June 2015, Volume 4, Issue 2, PP.13-17

Research on Fast Compression Algorithms and Visualization of STL Zhengxu Zhao 1, Denghui Zhang 2# 1. School of Information Science and Technology, Shijiazhuang Tiedao University, Shijiazhuang 050043, China 2. School of Mechanical Engineering, Shandong University, Jinan 250061, China #

Email: zhang.dh@outlook.com

Abstract As the standard file format of 3D printing, STL plays a very important role. The paper discusses several algorithms to remove redundancy vertices fast in STL files, and a hash function constructor of data compression algorithm is given. Lost light information is reconstructed by Gouraud Shading in the model rendering. OpenGL display lists and buffer object have been used to accelerate the visualization in the system which is developed in Linux. The result showed that the system is more efficient and visualizes the STL model smoother. Keywords: STL; Data Compress; Visualization

STL 模型的快速压缩算法与可视化研究 赵正旭 1,张登辉 2 1. 石家庄铁道大学,河北 石家庄 050043 2. 山东大学,山东 济南 250061 摘 要:STL 作为 3D 打印的标准文件格式,有着非常重要的作用。在深入研究 STL 文件存储特点的基础之上,给出了数 据压缩算法中的哈希函数构造方法。针对模型冗余过滤后光照信息损失的问题,提出了一种基于 Gouraud 插值的法向量 重建方法。在 Linux 平台上使用 OpenGL 开发了一套 STL 真实感显示系统,测试结果表明系统具有较高的时间效率和良 好的可视化效果。 关键词:STL;数据压缩;可视化

引言 近年来,制造业不断向智能化方向发展。作为智能制造的代表,3D 打印技术越来越受到人们的重视[1]。 3D 打印机领域有自己的行业标准文件格式 STL。STL 文件是由 SL 打印的发明者,3D 系统公司创始人查克. 赫尔于 20 世纪 80 年代创造。 STL 的数据压缩与可视化是 3D 打印后续工作的基本环节。STL 存储顶点数据的方式导致了每个顶点被 重复存储 6 次,产生大量的数据冗余,因而有必要采取快速,高效的压缩算法去除冗余顶点。压缩 STL 数 据后,部分顶点的法向量信息丢失,为了提高 STL 模型的真实感显示效果,必需重建每个顶点的法向量。 本文在综合考虑各种数据压缩算法后,选择了哈希表算法,针对 STL 数据存储的特点设计了哈希函数,并 给出了性能测试结果。在 STL 可视化过程中,采用 Gouraud 插值算法提高了模型的光滑度,综合利用 OpenGL 的缓冲区对象,显示列表技术加速了渲染效率。

1

STL 文件格式 STL 文件是由若干个三角形面片组合而成,三角面片相互拼接近似表示模型曲面。STL 只存储了模型的 - 13 www.ivypub.org/eea


几何信息,各个面片之间并不存在拓扑关系。STL 文件一般有文本(ASCII)和二进制(BINARY)两种格式,其 中二进制格式产生的文件较小,而文本格式具有更强的可读性,二者只是在数据的表示方法上不同,所代 表的模型是相同的。 STL 文件记录了三维模型的全部坐标信息,包括三角形面片的三个顶点的坐标数据和面片的法向量, 二进制格式如图 1 所示,图中的加号表示大括号的内容会重复一到多次。图 1 起始的 80 字节是文件头,可 以存储零件名等信息,接着的 4 个字节存储的是面片数量 N,之后为 N 个 50 字节长的字段每个字段依次存 储的是面片的法向量,第 1,2,3 个顶点在 X,Y,Z 轴的坐标分量。三个顶点所成方向与法向量的方向满足右手 定则。字段最后两个字节可以存储三角形面片的属性信息,如面片颜色等。STL 二进制文件中,文件长度 S 与面片数量必须满足以下关系 S = 50*N+84。

图 1 STL 二进制文件格式

2

冗余顶点去除 STL 文件结构清晰,但相邻面片的公共顶点被多次存储,形成了大量的冗余顶点。根据空间几何的欧

拉公式 V-E+F=X(P)[2]可以得出模型点、线、面之间的关系,其中 V 是多面体 P 的顶点个数,F 是多面体的 面片数,E 是多面体的边数。STL 描述的是封闭的几何模型,所以 X(P)=2。由三角面片的每条边都被共享 一次可知 E=3F/2,STL 实际存储的点个数 V'=3F,将二者代入欧拉公式可得存储顶点数 V'与模型顶点数 V 的关系 V'=6(V-2),即每一个顶点都会产生 5/6 个冗余顶点。所以必须采取快速,高效的算法去除 STL 文件 中大量的冗余顶点。

2.1 冗余顶点去除算法 去除冗余节点最直接的方法是逐点比较法,其算法复杂度为 O(N2)。在处理大量顶点数据时,搜索效率 低下,无法满足实际需要。 当前冗余节点快速去除算法主要有三轴分块排序算法,平衡二叉树和哈希表算法 [3-5]。三轴分块排序的 基本原理是将模型的三维坐标映射为一个三维数组,该数组每一维都是有序的,可以使用效率较高的二分 - 14 www.ivypub.org/eea


查找算法,算法复杂度为 O(N2)。平衡二叉树的平均搜索次数为 lg2N,当插入新结点时,为保证左子树与右 子树的平衡,减少下一次的查找次数,平衡二叉树算法会进行节点的旋转与移动操作,影响了整体的效率。 2.1.1

哈希函数构造方法

哈希表通过哈希方法查找记录,具有较高的查找效率,通过合理的哈希函数,可使搜索保持在常数时 间。哈希表的构造过程可分为两步:第一步是采用合适的哈希函数将键转换为表地址,理想情况下,不同 的键将映射到不同的地址,但通常多个键会映射到同一地址。其中的一种映射方法是取模哈希函数,选择 一个素数 P 作为数组长度。对于任意的整数键 K,求 K 除以表长 M 的余数,即 H(K)=K mod P。由于数组的 下标必须为整数,所以首先必须将 STL 文件中的浮点坐标数据转换为整型数据,一方面精心设计的哈希函 数可以在时间和空间上取得较好的平衡,另一方面在哈希表的构造过程中,哈希函数会被频繁调用,所以, 其计算过程不应过于复杂。STL 中每个顶点都有三个坐标分量 Vx、Vy、Vz,基于整数的基数特征和浮点数 的精确度,可以将三个分量映射为一个整数,K 值由公式(1)确定 K  Vx 1000000  Vy 1000  Vz  10

(1)

哈希的第二步就是解决第一步出现的冲突,最简单的方法就是对于每个具有相同哈希地址的记录构建 一个链表,该方法称为分离链法。另一种方法是线性探测法,如果可以事先预测存入哈希表中的元素数, 可以构建一个 M>N 的哈希表,则在哈希表中就无需使用链表,其中 M 为哈希表的长度,N 为表中的元素个 数,二者的比值为装载因子 a=N/M。在 STL 文件中,开始读取坐标信息之前,已经获取了面片数目 F 和顶 点数目 F/2,所以可以采取线性探测法。对于稀疏表(小 a),只需一次搜索就可检测出是否存在冲突,但 同时多余的空表会浪费存储空间。P 取大于 F/2 的最小素数可在运行时间和空间上取得较好的平衡,P 可在 梅森素数中选取,由于梅林素数的计算过程较复杂,所以 P 从一组已经计算好的素数表中选取。

图 2 哈希算法与红黑树算法性能对比

图 2 为采用红黑树和哈希表算法分别对 6 个 STL 文件去除冗余顶点的性能对比,计算机的配置为 4G 内 存,Intel Core i3 CPU。可知当面片数越多时,线性探测哈希表算法用时越短,运行效率越高。

3

STL 模型真实感显示 在剔除冗余顶点后,STL 的拓扑结构得到简化,但部分法向量信息也会随着冗余顶点丢失。初始状态

下,每个面片都有一个法向量(N1…N6),在去除冗余顶点后,六个面片共享一个顶点 A,如图 3 所示。而 在 OpenGL 中,一个顶点只能有一个法向量,面片 6 的法向量就会变成面片 1 的法向量 N1,而原有的法向 量 N2 会丢失,大幅度的法向量跃变会导致模型表面光亮度呈现不连续现象。在去除冗余结点的过程中,应 同时保存原有的法向量信息,为下一步的插值计算提供数据。 - 15 www.ivypub.org/eea


在解决多面片表示的曲面模型绘制算法中最具代表性的就是 Gouraud 和 Phong 算法[6-7]。 Phong 算法是一种法向量插傎算法。它对面片的顶点做双线性插傎,将反射光分解为环境光,漫射光和 镜面光等三个分量计算出各采样点的光亮度。Gouraud 光亮度插傎算法将多面片模型取为近似表示该曲面的 各多边形顶点光亮度的双线性插傎。已知各个三角面片的法向量,对每一顶点,可取共享该顶点的各面片 的法向量的均值作为该顶点的法向量。 与 Phong 算法相比。采用 Gouraud 算法不但可以克服由三角面片近似表示的模型光亮度不连续现象,而 且 计 算 量 较 小 。 在 图 3 中 , 法 向 量 Na 可 取 为 共 享 该 顶 点 的 各 面 片 的 法 向 量 N1…N6 的 平 均 值 Na=(N1+N2+N3+N4+N5+N6)/6。在将 Na 代入光照模型之前,需先对 Na 进行归一化处理。 图 4 为未使用 Gouraud 的模型渲染效果,图 5 为使用 Gouraud 插值的可视化效果,可以看出,模型明显 变得光滑,而且明暗跃变的现象减弱。 在使用 OpenGL 开发 STL 可视化系统时,为提高模型渲染效率,使用了 OpenGL 缓冲区对象[8]和显示列 表[9]技术。

图 3 法向量跃变现象

图 4 未经 Gouraud 处理的 STL 模型

图 5 经过 Gouraudr 处理的 STL 模型 - 16 www.ivypub.org/eea


OpenGL 是按照 C/S 模式设计的,在执行各种图形操作时,OpenGL 会在需要的时候把数据从客户端传 送到服务端。在 STL 模型的真实感显示过程中,顶点与法向量数据并没有修改,所以数据的传递操作是冗 余的。利用 OpenGL 1.5 之后版本的缓冲区对象,将各种数据一次性传递到图形服务器中,消除了渲染过程 中的多余的数据传递。 显示列表可以将一系列的操作的运算结果存储起来,以后每次调用显示列表时就直接返回结果,消除 了重复的矩阵运算[10]。系统针对 STL 模型的静态特性,创建了显示列表来存储模型的渲染结果,优化了程 序性能。

4

结语 本文首先介绍了 3D 打印的标准文件格式,对各种冗余顶点快速去除算法进行了研究,依据 STL 文件特

点,设计了哈希函数,实现了常数时间内的数据压缩。在 STL 模型的可视化过程中,采用 Gouraud 算法重 建了顶点的法向量。实验结果表明,本文所提出的方法具有很高的应用价值,为 3D 打印的后续工作提供了 有力支撑。

REFERENCES [1]

Lipson, Hod, Melba Kurman. “Fabricated: The New World of 3D Printing” [M]. Indianapolis, Indiana: John Wiley & Sons Inc, 2013

[2]

Edgebreaker R J. “Connectivity compression for triangle meshes”[J]. IEEE Transactions on Visualization and Computer Graphics, 1999, 5(1): 47-61

[3]

Xuewen Cheng, Dequn Li, Huamin Zhou, et al. “Algorithm for fast filtering redundancy vertex in STL solid based on Hashtable”[J]. Journal of Huazhong University of Science and Technology, 2004, 06: 69-71

[4]

Hu Zhu, Zhongfeng Yang,Wei Zhang. “Progress in Study of STL File and Its Application” [J]. Machine Tool & Hydraulics, 2009, 06: 186-89

[5]

Wei Wei, Laishui Zhou,Liyan Zhang. “Rapid STL File Loading and Visualization”[J]. Mechanical Science and Technology, 2006, 08: 935-938

[6]

Haipeng Pan, Tianrui Zhou, Shifei Hu. “Implementation of the visualization for STL model”[J]. Journal of Plasticity Engineering, 2006, 06: 94-98

[7]

Zhengju Wang, Mingrui Chen. “Implementation of shading techniques based on OpenGL”[C]. 3rd International Conference on Mechanical, Control, and Electronic Information, ICMCEI 2014, June 27-29, 2014: 1038-1042

[8]

Dong Wang, Yunan Zhang, Hanfei Li, et al. “Real-time visualization of dynamic terrain based on GPU” [J].Computer Engineering and Applications, 2010, 46(14): 173-175

[9]

Qin Zhang, Jian Zhang, Jianping Min. “Study on Real Time of Particle System” [J]. Computer Engineering, 2003, 18: 46-48

[10] Yang Guo, Zhengxu Zhao. “Community detection algorithms using modularity on function call network of software” [J]. International Journal of Applied Mathematics and Statistics, 2013, 43(13): 248-254

【作者简介】 1

赵正旭(1960-),男,汉,博士,教

2

张登辉(1988-),男,汉,博士,研究方向:计算机辅助

授,研究方向:虚拟现实。于 1977、

设计。2011 年获得郑州轻工业学院电气学院工学学士学位,

1981 年获山东工业大学机械系机制工艺

2014 年获得石家庄铁道大学信息科学与技术学院工学硕士学

专业学士和硕士学位,1992 年获英国国

位,2014 年至今于山东大学机械工程学院攻读机电专业博士

家学位部 CNAA 计算机辅助工程专业哲

学位。Email: zhang.dh@outlook.com

学博士和博士后。 Email: zhaozx@stdu.edu.cn - 17 www.ivypub.org/eea


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.