发明内容
本发明所要解决的技术问题是提供一种用于面曝光增材成型的3D模型的切片及投影面生成方法,运算效率高,支撑结构合理。
为此,本发明的用于面曝光增材成型的3D模型的切片及投影面生成方法包括以下步骤:
A)输入三维实体模型的STL文件,读取文件中包含的模型的顶点、边、三角形数量信息,判断其是否符合三维实体模型的欧拉公式,在满足的情况下进入步骤B);若不满足,提示输入模型错误;
B)建立模型的顶点表格Vt、三角形表格Trt;
C)遍历顶点表格和三角形表格,建立半边数据表HEt;
D)模型显示和渲染;
E)设定显示图片的像素值,根据加工设备平台大小,获取像素点和实体实际尺寸的转换关系;
F)完成实体模型的显示,将模型的最低面置于空间坐标系的x-y平面,通过一系列的旋转、平移,使模型位于最佳加工位置—通常位于图形及加工平台的中心,即让模型最底面的中心点,位于加工平台的中心;
G)沿z轴负方向一个单位的位置建立一个虚拟平面,称之为切片基层,在切片基层上计算空间射线,分别有如下几个步骤:
G1)计算实体模型的包围盒坐标(包围盒指能够包围实体模型的最小的长方体),作为整个空间射线计算的边界Xmin,Xmax,Ymin,Ymax;
G2)该虚拟平面的z坐标值存储为各像素点对应的射线的初始边界点;
G3)遍历实体模型的所有三角片,提取其包围盒边界坐标,利用步骤E)中所得的像素实体尺寸转换关系获得三角形边界Xmin,Xmax,Ymin,Ymax对应的像素值,标记位于该像素边界中的所有像素点对应的射线,保存该三角片的ID于射线中,并将射线类中记录其穿过包围盒的三角形个数的变量Tri_num增加1;
G4)遍历虚拟平面上各像素点的空间射线(每个像素点对应一条射线。像素点有大小,是图像显示的最小单位。射线方向在本算法中不涉及),提取出G3)获得的三角形ID,将射线与保存其中的三角形逐个求交,并判断该交点是否位于三角片中,舍弃不在三角片内的交点,保存位于三角片或边界上的交点,形成该射线与实体模型的交点序列zvalues;
G5)剔除序列zvalues中的重复点,按照Z坐标由小到大排序;
H)从模型最底层开始,以层厚thickness(层厚根据成型精度要求设定,一般为50至100微米)为增量,至包围盒最顶端,逐层判断图形像素点是否位于模型内部:每层切片图形的初始像素值设为黑色;在第n层上,层高为Zn=n×thickness,遍历包围盒的像素边界中的每个像素射线,若该层高值处于射线交点序列的有效区段内,则该点处于模型内部,应设为白色像素点;否则为黑色像素点;
I)支撑的分布由用户自行定义。最简单的分布模式是半径为R的支撑圆柱体形成的间距为d的矩形阵列。对处于支撑圆柱体中心处的像素点,判断其Z坐标所处的射线交点序列的区段,进而判断该像素点是否为支撑。
本发明基于模型半边数据结构处理任意三维实体的三角面片网格,在切片的同时对模型需要的支撑进行同步运算,提高了算法效率;本发明设计的支撑结构占用空隙部分少,用最小的支撑体积获得最佳支撑效果。
同时,本发明的一些优选实施方式还包括如下优点:采取合适的抗锯齿措施,而不降低软件的运算效率;采用最优的拓扑结构构建支撑柱和支撑分支,以实现最小的支撑体积和最优的支撑效果。
具体实施方式
如图1所示,本实施例的基于射线追踪的切片及投影面生成方法包括以下步骤(图中英文字母标号代表下述步骤编号):
A)输入三维实体模型的STL文件(STL文件是增材制造领域中的一种表示三维模型的标准格式),读取3D实体模型的顶点、边、三角形数量,判断其是否符合三维实体模型的欧拉公式(顶点数目、三角形数目、边数目分别记为V、T、E,则三者必须满足网格模型的欧拉公式:T–E+V=2–2H,其中H表示通孔的数目),在满足的情况下进入步骤B);若不满足,提示输入模型错误;
B)建立模型的顶点表格Vt、三角形表格Trt(输入的原始模型中,包含了点、边、三角形信息,但是在我们的程序中,需先建立点和三角形的表格,然后再在其基础上,生成半边数据表格,半边数据结构是本发明采用的一种用于遍历模型的工具.模型是以STL格式读入,STL文件中包含了顶点和三角形信息,本算法只需再此基础上建立半边数据表格)。在建立顶点数据表时,按照顶点坐标的X坐标值升序排列顶点,若X坐标相等,则按照Y坐标值排列。
顶点表格Vt中存储了各顶点ID,顶点XYZ坐标值,顶点ID依据顶点排列次序分别命名为1,2,……;三角形表格Trt中存储了三角片ID,以及该三角片对应的三个顶点的ID,三角片ID按照模型三角面片的导入顺序依次命名为1,2,……;
C)遍历顶点表格和三角形表格,建立半边数据表HEt;如图2,对于任意三角形tri1,包含3条按照逆时针顺序排列的半边HE,每条半边HE在该三角形中对应一个顶点o,以及2个端点v1和v2。按照v1和v2的坐标值以升序排列所有半边,找出拥有相同端点v1和v2的边e4,即为e1的逆半边,表示为e1.r。如表格所示为建立的半边数据表格示例。基于该半边数据结构,模型中的任意顶点、边和三角形可以被快速查询,极大地提高了算法的运算效率。
模型的显示基于开源的OpenGL(OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL的英文全称是“OpenGraphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”),渲染方法采用Phong着色法(是三维电脑图像的绘图技巧之一,结合了多边形物体表面反射光的亮度,并以特定位置的表面法线作为像素参考值,以插值方式来估计其他位置像素的色值;与Gouraud着色法比较,Phong着色法的效果比前者更逼真,但运算程序也比前者更为复杂);
E)设定显示图片的像素值,根据加工设备平台大小,获取像素点和实体实际尺寸的转换关系;具体如下:图像采用的分辨率为BMPSIZE_X×BMPSIZE_Y,加工平台的尺寸设计为EXTENT_X×EXTENT_Y,两者长宽比相同。则单位像素大小对应的实际尺寸大小为PIXEL_LENGTH=EXTENT_X/BMPSIZE_X=EXTENT_Y/BMPSIZE_Y。
F)完成实体模型的显示,将模型的最低面置于空间坐标系的x-y平面,通过一系列的旋转、平移,使模型位于最佳加工位置—通常位于图形及加工平台的中心;即让模型最底面的中心点,位于加工平台的中心。
模型的包围盒坐标边界记为Xmin,Xmax,Ymin,Ymax,Zmin,Zmax;调整后的模型包围盒底面中心位于(EXTENT_X/2,EXTENT_Y/2,0)处(此处为平台正中心,光照最强且最均匀,加工条件最佳),故需将模型平移向量
G)沿z轴负方向一个单位的位置产生一个虚拟平面,称之为切片基层,在切片基层上计算空间射线,分别有如下几个步骤:
G1)计算实体模型的包围盒坐标,作为整个空间射线计算的边界Xmin,Xmax,Ymin,Ymax;
G2)如图3a、3b所示的切片基层,该虚拟平面的z坐标值存储为各像素点的初始边界点;图3a、3b所示为人物头像的三角网格模型,其中:A0为切片基层上的像素点,2为交点,3为像素射线,4为切片基层,5为三维实体模型,6为三角形,7为三角形顶点,图3b是图3aI部位的局部放大图;(注:像素点大小不需要自己决定,是计算机图形的最小单位。)
G3)遍历实体模型的所有三角片,提取其包围盒边界坐标,利用步骤E)中所得的像素实体尺寸转换关系获得三角片边界Xmin,Xmax,Ymin,Ymax对应的像素值,标记位于该像素边界中的所有像素点对应的射线,保存该三角片的ID于射线中,并将射线类(本算法以c++语言定义了一个射线类,其中包含了用于保存三角形ID的数组)中记录其穿过包围盒的三角片个数的变量Tri_num增加1;
本算法以c++语言定义的射线类示例如下:
classCray
经过本步骤后,从切片基层射出的每条射线都保存了其穿过的三角片的ID和数量;
G4)遍历虚拟平面上各像素点的空间射线(每个像素点对应一条射线。像素点有大小,是图像显示的最小单位。射线方向在本算法中不涉及),提取出该像素点穿过的三角片ID(由G3)获得)并逐个求交,判断该交点是否位于三角片中,舍弃不在三角片内的交点,保存位于三角片或边界上的交点,形成该射线与实体模型的交点序列zvalues;如图3,其中的像素点可以做为说明像素射线的计算方法的例子;
G5)剔除序列zvalues中的重复点,按照Z坐标由小到大排序;
图4是本发明实施例切片基层上所有像素射线穿过实体模型的示意图。
H)从模型最底层开始,以层厚thickness(层厚根据成型精度要求设定,一般为50至100微米)为增量,至包围盒最顶端,逐层判断图形像素点是否位于模型内部,以赋值切片图形各像素点值;下面以图5所示的当前切片层为例说明该层图形的像素点的颜色赋值方法:
H1)将当前切片层的像素网格中的所有像素点的颜色设置为黑色(每层切片图形的初始像素值设为黑色;黑色表示“无”,白色表示“有”);设当前切片层的层高为Zn=n×thickness,遍历包围盒的像素边界中的每个像素射线,如图5所示的位于当前切片层8的像素点A,其对应的像素射线由切片基层上的像素点A0射出(沿z轴负方向一个单位的位置建立一个虚拟平面,称之为切片基层,A0即为切片基层上的点,此在第一部分有说明);若该层层高Zn处于射线交点序列的有效区段内(有效区段为G2)中所列的z坐标区间),则该点处于模型内部,应将该像素点设为白色;
H2)图5中像素点A所处的射线的交点序列为(Z0,Z1,Z2);当前切片层层高位于(Z1,Z2),(Z3,Z4),……(Z2k-1,Z2k)之间(若模型更加复杂,射线在Z2后还有可能与更多的点相交,之后的相交点的高依次用Z3,Z4……表示),故可以判定像素点A位于模型内部,其像素值应该设为白色;
H3)对当前层所有像素点进行判断后,输出切片图形,如图6所示;设当前的切片高度为z。对像素点(x_pixel,y_pixel)进行图形颜色判断。该像素点所在射线的剔除重点并排序后的交点序列zvalues为(z0,z1,z2,z3,……,zn),一般情况下z0可取位于x-y平面下方一个单位的距离,即z0=-1。返回z在交点序列中所处的区间zi<z<z(i+1),若i为偶数,则像素点取黑色;若为奇数,则取白色。(其原理参见图6)
I)设定支撑分布如图7所示(该分布预先设计好,存储于软件中,由用户选择——支撑如何分布目前采用最简单的方法,即***预先定义,由用户选择)。最简单的分布模式是半径为R的支撑圆柱体形成的间距为d的矩形阵列。对处于支撑圆柱体中心处的像素点,判断其Z坐标所处的射线交点序列的区段,进而判断该像素点是否为支撑。假设图8中的当前切片层中的像素点A位于支撑分布的某个圆柱中心,若当前层高Zn处于(Z0,Z1),(Z2,Z3),……(Z2k,Z2k+1)区段内,则该像素点A及其半径R范围内的所有像素点为支撑,设置颜色为白色;若像素点A不处于支撑分布图的任何圆柱中心,则跳过步骤I)。图9所示为在图8当前切片层上生成的支撑投影,该图形将同其他切片层生成的图形一起用于3D打印制造(图6和图7最后会在一张图上,这张图被用来3d打印模型)。
在本实施例中,还采用多通道抗锯齿算法消除射线求解带来的锯齿影响。
推荐的多通道过滤器为
{-0.52,0.38,0.128,
0.41,0.56,0.119,
0.27,0.08,0.294,
-0.17,-0.29,0.249,
0.58,-0.55,0.104,
-0.31,-0.71,0.106}
(此过滤器为标准的过滤器,本发明只是应用)。
对每层图形向过滤器中的6个方向进行平移,如{-0.52,0.38},{0.41,0.56},{0.27,0.08},{-0.17,-0.29},{0.58,-0.55}及{-0.31,-0.71},然后将各像素点的像素值以过滤器中各个方向的权重(0.128,0.119,0.294,0.249,0.104及0.106)进行加权平均,所得到的图形为消除锯齿之后的图形。
支撑点分布拓扑网格提供多种选择,包括三角形网格、四边形网格、泰森多边形网格等;支撑底部依次相连,主干则以交叉的桁架结构连接,确保其强度;本实施例最终生成的支撑结构如图10a、10b、10c、10d所示,其中图10a、10b、10c是二维图,图10d是3维图,图10a、10b、10c分别是图10d所示的立体结构的层高h1、h2、h3处的支撑投影横截面,9为支撑圆柱,10为桁架结构。层h1位于最底层,其投影图形为按照预定义的分布生成的圆点;之后会根据层高,将连接支撑圆柱的桁架结构投影到各层图形上,如图10d所示的层h2中添加的矩形。与层h2相比,层h3的桁架结构投影仅需将矩形偏移一定距离δ,该距离由层h3与层h2的高度差H和桁架结构的倾斜角度θ决定,即δ=H×cotθ。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。