黃國勝,徐 欣,江先志,滕 軍,田芬芳
(1.浙江理工大學 機械與自動控制學院,浙江 杭州 310018;2.浙江騰騰電氣有限公司,浙江 溫州 325000)
面向3D打印機的彩色三維模型成型技術
黃國勝1,徐 欣1,江先志1,滕 軍2,田芬芳2
(1.浙江理工大學 機械與自動控制學院,浙江 杭州 310018;2.浙江騰騰電氣有限公司,浙江 溫州 325000)
針對3D打印技術打印速度慢、打印精度低、不能多色打印等缺陷,研究3D打印機的STL文件載入和讀取、基于OpenGL的模型顯示、彩色圖片像素采集以及基于RGB顏色空間的數(shù)據(jù)處理算法等技術,以便將數(shù)據(jù)轉化成相應的G代碼發(fā)送給下位機.
圖像;三維模型;像素;RGB;STL;G代碼
3D 打印,又稱三維打印,是一種快速成型技術,為用戶提供了新的設計、創(chuàng)作和制作方法.它是通過逐層打印的方式來成型的,形象地說,3D 打印就是 2D 打印沿著高度方向逐層疊加,創(chuàng)造一個立體的幾何圖形.在計算機中輸入數(shù)據(jù),設計3D 模型后,計算機自動將 3D 模型的數(shù)據(jù)進行分層,像人們檢查身體時做 CT 掃描一樣,形成多個單層圖像.3D 打印機根據(jù)這些分層圖像數(shù)據(jù),一層一層地將材料疊加上去,形成一個立體實物[1].
3D打印技術從狹義上來說屬于增材成型技術.從成型工藝上看,3D打印機無論使用何種方法,其打印過程都基本相同.首先,通過計算機輔助設計軟件創(chuàng)建三維虛擬模型,并將模型的格式轉換成STL文件格式,然后通過上位機對STL文件進行后期處理,再連接3D打印機進行打印.
2010 年以后,3D 打印技術已經(jīng)被應用于各個工業(yè)領域,如航空航天、生物醫(yī)療、個性化消費、注塑模具等[2].新興增材制造技術也已經(jīng)發(fā)展為更精確的技術領域,如金屬零件增材制造、微光固化成型、高精密數(shù)字化成型、數(shù)字化材料 3D 打印等[3].
本研究的重點在于STL文件的后期處理,包括文件數(shù)據(jù)采集方法、基于圖像映射的彩色三維模型成型、切片分層和多頭G代碼的生成.
STL文件格式是一種用三角面片表達實體表面數(shù)據(jù)的文件格式.它是若干空間小三角面片的集合,每個三角面片用三角形的3個頂點和指向模型外部的法向量表示[4].根據(jù)數(shù)據(jù)存儲方式的不同,STL 文件可分為ASCII碼和二進制碼兩種存儲方式[5].ASCII格式文件可以讀取,便于測試,故選用其作為可視化的研究對象.其格式如下:
facet
normalxyz(三角面片法向量的3個分量值)
vertexxyz(三角面片第一個頂點坐標)
vertexxyz(三角面片第二個頂點坐標)
vertexxyz(三角面片第三個頂點坐標)
endloop
endfacet(完成一個三角面片定義)
一個facet和下一個endfacet之間的數(shù)據(jù)塊為一個三角面片的幾何信息,normal后面的3個值表示當前三角面片的法向量,接下來的3行為三角面片的3個頂點坐標,都以vertex開頭[6].
本研究以STL格式文件為數(shù)據(jù)源,利用Visual Studio 2013開發(fā)環(huán)境(圖1),基于C#系統(tǒng)庫函數(shù)的ReadLine()方法逐行讀取STL文件,通過字符串處理函數(shù)對3個法向量數(shù)據(jù)和3個頂點數(shù)據(jù)進行判斷和分析,并將結果儲存于數(shù)組中,同時以OpenGL(Open Graphics Library)作為三維圖形接口,利用其強大的圖形處理能力對三角面片進行逐個繪制,最后合并,形成完整的三維模型.
圖1 開發(fā)環(huán)境截圖
軟件讀取STL文件的步驟如下:①定義一個三角形T;②讀取上述數(shù)據(jù)結構中的normal段法向量數(shù)據(jù),存儲到glNormals[]數(shù)組中,讀取vertex段頂點數(shù)據(jù),存儲到glVertexs[]數(shù)組中;③循環(huán)判斷文件是否讀取完成;④讀取結束.
STL文件格式簡單,只能存儲三維物體的幾何信息,并不支持顏色信息.因此,下一步要做的是采集圖片的顏色信息,將圖片信息映射到三維模型上,然后生成相應的G代碼,發(fā)送給下位機.
STL文件并不存儲顏色數(shù)據(jù),為了將顏色信息映射到模型上,解決模型彩色顯示的問題,需要采集圖片的RGB顏色信息.RGB被稱為三原色或顯示屏模式,它屬于發(fā)光配色,是根據(jù)顏色發(fā)光的原理來設計的[7].在 RGB 模式中,R 代表紅光(Red),G 代表綠光(Green),B 代表藍光(Blue),每種光的亮度取值為0~255.對這3種色彩的亮度值進行調(diào)配組合,可產(chǎn)生新的像素顏色,從而形成更多的色彩[8].
首先,使用Bitmap類方法綁定需要載入的圖像格式文件bmp(圖2).其關鍵代碼為:
Bitmap bmp = new Bitmap(pictureFilePath);//綁定圖像格式文件
定義Bitmap后,使用bmp.Width和bmp.Height分別獲取圖像的像素寬和像素高,使用bmp.GetPixel(x,y)獲取像素點位置為(x,y)的顏色信息.
圖2 載入的圖像
然后,分析綁定載入的STL文件的頂點數(shù)據(jù)(即glVertexs[]數(shù)組數(shù)據(jù)),對x坐標和z坐標數(shù)據(jù)進行比較,獲得模型中x坐標值和z坐標值的最大值和最小值,從最大值和最小值的絕對差得到模型寬ModelWidth和模型高ModelHeight.其關鍵代碼為:
ModelWidth = Math.Abs(ModelxMax - ModelxMin);//計算STL模型寬
ModelHeight = Math.Abs(ModelzMax - ModelzMin);//計算STL模型高
求得模型寬和模型高后,對比圖像像素寬bmp.Width和像素高bmp.Height,獲取比例值,進而求得glVertexs[]數(shù)組數(shù)據(jù)在圖像中相應的像素點位置(Position_Width,Position_Height),通過GetPixel函數(shù)獲取該點的像素顏色信息.其關鍵代碼為:
Position_Width=(Position_x-ModelxMin) *WidthMax/ModelWidth+xmin;
Position_Height=(zmax-(Position_z-ModelzMin)*HeightMax/ModelHeight;
returnColorToRgba32(bmp.GetPixel(Position_Width,Position_Height));
將計算出的對應像素點顏色數(shù)據(jù)存儲到glColors[]數(shù)組中,再用OpenGL庫繪制三角面片,同時加入對應的顏色數(shù)據(jù).
圖3所示為使用載入圖像映射后三維模型成型的效果.
圖3 三維模型成型的效果
在彩色三維模型成型后,調(diào)用Slic3r軟件(一款用于將STL文件轉化成G代碼的開源軟件),將模型分層切片.切片時發(fā)現(xiàn),在RGB模式下,三原色光每種均有256個亮度值,總共有256×256×256個,即16 777 216 個亮度值.然而,下位機中擠出頭數(shù)只有8個,只有8種顏色可選擇,限制了所用的顏色種類.本研究使用RGB顏色空間模型來處理顏色數(shù)據(jù)(圖4)[9].
圖4 RGB顏色空間模型
這里,使用的8個擠出頭分別對應藍、黑、綠、青、紅、洋紅、黃和白8種顏色.將模型的顏色與擠出頭的顏色進行對比,選擇顏色最接近的擠出頭.其關鍵代碼如下:
sumRGB[0] = Math.Pow(RGB.R-0,2)+
+ Math.Pow(RGB.B-255,2);
for (inti= 0;i< 8;i++){
if (sumRGB[i] <= temp){
temp = sumRGB[i];
num =i;
}
}
在生成G代碼時,根據(jù)所選的sumRGB[i]數(shù)組的i的大小,用T0~T7表示擠出頭的選擇,來控制下位機的運動.
圖5和圖6分別為切片分層及加入顏色后的顯示效果.圖7所示為軟件生成的G代碼.
圖5 切片分層后的效果
圖6 加入顏色后的分層效果
本研究分析并實現(xiàn)了3D模型的彩色化,將模型數(shù)據(jù)轉化為3D打印機可讀取的G代碼,并且實現(xiàn)了整個過程的可視化操作.但目前其功能還稍有局限,比如顏色只能通過圖片讀取,而不能直接在表面編輯,著色實現(xiàn)的過程仍待改進.
[1] 王廣春,趙國群.快速成型與快速模具制造技術及其應用[M].北京:機械工業(yè)出版社,2013.
[2] 王雪瑩.3D打印技術與產(chǎn)業(yè)的發(fā)展及前景分析[J].中國高新技術企業(yè),2012(26):3-5.
[3] 張建梅,趙 立,黨驚知,等.快速成型技術的應用及發(fā)展方向[J].中北工學院學報,2002,23(4):301-305.
[4] 楊 光,劉偉軍,王維田,等.STL格式文件拓撲重建及快速切片算法研究[J].現(xiàn)代制造工程,2009(10):32-35.
[5] 張貞貞,陳定方.基于VC的STL文件讀取[J].湖北工業(yè)大學學報,2008,23(2):44-46,73.
[6] 耿 鐵,任清海.基于OpenGL 的 STL 文件三維模型真實感圖形可視化研究[J].制造業(yè)自動化,2011,33(16):121-124.
[7] 許寶卉.彩色CRT色彩特性及色彩空間轉換方法的研究[D].西安:西安理工大學,2005.
[8] 鞏亞萍,高 軍.印刷品檢測過程中的色彩空間轉換研究[J].山東理工大學學報(自然科學版),2009,23(4):53-57.
[9] 楊振亞,王 勇,楊振東,等.RGB顏色空間的矢量—角度距離色差公式[J].計算機工程與應用,2010,46(6):154-156.
Colorful 3D Model Molding Technology for 3D Printer
HUANG Guo-sheng1,XU Xin1, JIANG Xian-zhi1,TENG Jun2, TIAN Fen-fang2
(1.School of Mechanical Engineering and Automation, Zhejiang Sci-Tech University,Hangzhou 310018, China; 2.Zhejiang Tengteng Electric Co.,Ltd, Wenzhou 325000,China)
3D printing technology which makes objects by layer-by-layer printing based on a digital model file. There are also many weaknesses and limitations, such as slow print speed, low print accuracy and lack of multi-color printing. Therefore, this paper focuses on solving the problem of the host computer of the color 3D printer, including the loading and reading of the STL file, the OpenGL-based model display, the color picture pixel acquisition, the RGB color space data processing algorithm and so on. And finally send to the data into the corresponding G code the next crew.
image; 3D model; pixel; RGB; STL; G code
2016-12-20
浙江省重大科技專項計劃資助項目(2014C11SA310003);浙江理工大學校企合作資助項目(14020089-J)
黃國勝(1993-),男,浙江蒼南人,碩士研究生,研究方向為機器視覺.
1006-3269(2017)02-0030-04
TP391
A
10.3969/j.issn.1006-3269.2017.02.007