王曉暉 狄超
關(guān)鍵詞:C++建模;STL文件;3D打印;計算機應(yīng)用
國外的數(shù)字化已經(jīng)普及,通過對已有事物進行數(shù)字化,不僅能加快對該事物的生產(chǎn),也能對其的分析提供許多幫助。猶他茶壺的數(shù)字化完成后,通過對數(shù)字化的數(shù)據(jù)進行公開,不僅使得猶他茶壺成了圖形學(xué)的公認模型,也讓其影響力進一步得到擴散。這種數(shù)字化帶來的好處不僅如此,為了提升我國紫砂壺的影響力,以及為國產(chǎn)紫砂壺數(shù)字化提供基礎(chǔ),保證今后的紫砂壺制作更加科學(xué)有效,因此紫砂壺的數(shù)字化是十分必要的。
隨著科技的發(fā)展,使用草圖去繪制茶壺的方法已經(jīng)過時。而使用測量工具測量茶紫砂壺的輪廓數(shù)據(jù),進而通過輪廓數(shù)據(jù)進行茶壺的數(shù)字化建模成了首選。通過對生成的數(shù)字化模型進行導(dǎo)出保存,不僅可以得到紫砂壺的數(shù)據(jù)文件,同時也可以將數(shù)據(jù)文件用于3D打印[1],從而打印出不同外觀、不同類型的紫砂壺。
1 紫砂壺的基礎(chǔ)數(shù)據(jù)采集
1.1 紫砂壺采集數(shù)據(jù)分析
紫砂壺的形狀,大體可以分為兩類,一類是回轉(zhuǎn)體,如壺身、壺蓋等;一類是非回轉(zhuǎn)體,如壺柄、壺嘴等。面對這兩類形狀,都可以采用提取輪廓信息來實現(xiàn),回轉(zhuǎn)體采用提取回轉(zhuǎn)部位的輪廓信息進行回轉(zhuǎn),便可得到整個回轉(zhuǎn)體的信息。非回轉(zhuǎn)體可以采用提取非回轉(zhuǎn)體兩側(cè)的輪廓信息,改變其余控制點的高度來實現(xiàn)非回轉(zhuǎn)體。因此,最紫砂壺的數(shù)據(jù)采集主要為回轉(zhuǎn)體和非回轉(zhuǎn)體的輪廓信息的提取。
1.2 測量工具采集
使用紫砂壺的側(cè)視圖作為測量對象,而對輪廓信息的擬合,一般采用PS鋼筆工具進行實現(xiàn),且鋼筆工具本身為貝塞爾曲線。但鋼筆工具不能提供所測量之后的控制點信息。因此,基于MFC框架使用C++編程實現(xiàn)貝塞爾曲線測量工具并顯示出測量之后的控制點信息。通過對測量工具的實現(xiàn),以及對不同紫砂壺的測量,得到了秦權(quán)壺、漢掇壺的輪廓信息(圖1,圖2) 。
2 建立紫砂壺的數(shù)字化模型
2.1 建模曲面
建模曲面選用貝塞爾曲面進行建模,貝塞爾曲面由貝塞爾曲線拓展而來[2]。最常用的是雙三次貝塞爾曲面,通過拼接貝塞爾曲面可以構(gòu)造復(fù)雜的曲面模型。雙三次貝塞爾曲面由兩組三次貝塞爾曲線交織而成??刂凭W(wǎng)格由16個控制點構(gòu)成,如圖3所示??梢钥闯鲐惾麪柷嬗?6個控制點,其中12個控制點位于邊界上,只有角上的4個點位于曲面上。通過將紫砂壺的輪廓信息提取到的控制點信息輸入到貝塞爾曲面生成器中,就可以生成對應(yīng)的貝塞爾曲線。具體地,回轉(zhuǎn)體曲面可以由輪廓信息去生成回轉(zhuǎn)體的控制點。這里用到了Bezier圓的特性,只要知道了空間中一個點的坐標(biāo),且已知魔術(shù)常數(shù)m≈0.5523,那么同z坐標(biāo)下,四分之一圓的坐標(biāo)滿足P0(0,1,z) ,P1(m,1,z) ,P2(1,m,z) ,P3(1,0,z) 。通過這樣的方法,可以實現(xiàn)由輪廓信息中一點,推出同z坐標(biāo)下四分之一圓的控制點坐標(biāo)信息,進而推出同z坐標(biāo)下整個圓的控制點坐標(biāo)信息,將所得的輪廓信息都推出同z坐標(biāo)下的控制點,就可以得到整個回轉(zhuǎn)體曲面所需要的控制點信息,進而通過輸入控制點信息去生成回轉(zhuǎn)體曲面。而非回轉(zhuǎn)體部位,由于采集了兩側(cè)輪廓信息,也就是8個控制點,在這個基礎(chǔ)上,復(fù)制同樣的8個控制點,通過改變控制點的高度,抬升曲面,進而擬合非回轉(zhuǎn)體部位,如圖4所示。
2.2 曲面生成
雙三次貝塞爾曲面的建模,同樣基礎(chǔ)MFC框架使用C++編程實現(xiàn),一般采用遞歸細分法繪制曲面網(wǎng)格,曲面細分用四叉樹遞歸算法,直到分割出的子曲面近似為平面四邊形,一個簡單的遞歸終止是均勻分割策略,即將所有曲面分割到相同的層次,這樣可以通過預(yù)先設(shè)定的遞歸深度來實現(xiàn)。當(dāng)子曲面達到規(guī)定的遞歸深度時,可以用4個角點連成的平面四邊形來代替。
2.3 茶壺數(shù)字化模型
將控制點信息輸入貝塞爾曲面生成程序中,按照回轉(zhuǎn)體和非回轉(zhuǎn)體進行分類生成,每個面片輸入相應(yīng)的16個控制點,由程序生成對應(yīng)控制點的貝塞爾曲面。通過將紫砂壺不同部位分為不同的回轉(zhuǎn)體和非回轉(zhuǎn)體,同時設(shè)置遞歸深度,便可以得到紫砂壺的數(shù)字化模型。此項目采集了秦權(quán)壺和漢掇壺的輪廓信息,并生成了對應(yīng)曲面的控制點,輸入到程序中,分別生成了對應(yīng)的紫砂壺數(shù)字化模型,如圖5、圖6。
3 生成紫砂壺數(shù)字化文件
3.1 STL 文件
STL文件僅描述三維物體的表面幾何形狀,沒有顏色、材質(zhì)貼圖或其他常見三維模型的屬性[3]。STL格式有ASCII格式和二進碼兩種形式。STL文件還可用于3D打印,STL文件的ASCII碼格式是逐行給出三角面片的幾何信息[4]。在這種格式文件中,三角面片的信息單元facet是一個帶矢量方向的三角面片,而STL三維模型就是由一系列這樣的三角面片構(gòu)成的。其中每一個facet由7行數(shù)據(jù)組成,如圖7,其中facetnormal代表的是三角形面片的法矢量,而vertex代表是三角形三個頂點的坐標(biāo)。
3.2 茶壺STL 文件的轉(zhuǎn)換
由于STL文件認定的坐標(biāo)系方向是x軸向右,y軸向內(nèi),z軸向上,如圖8所示[5]。在C++建模茶壺中坐標(biāo)系是x軸向右,y軸向上,z軸向外,如圖9所示。因此,在輸出坐標(biāo)信息之前,需要將y,z坐標(biāo)調(diào)換。將劃分得到的兩個三角形面片的數(shù)據(jù)按照STL文件格式進行輸出,以此類推,便可得到整個茶壺的STL文件。
4 紫砂壺的3D 打印
將生成的秦權(quán)壺STL文件和漢掇壺STL文件,放入到3D打印機中,得到秦權(quán)壺-一體化模型(圖10) 和漢掇壺-一體化模型(圖11) [6]。同時,由于數(shù)字化的便利,可以復(fù)制壺身數(shù)據(jù),翻轉(zhuǎn)復(fù)制出壺身的法線,并降低其半徑,就可以得到壺內(nèi)壁,同樣的方法可以得到壺蓋內(nèi)壁等,將得到的數(shù)字化文件放入3D打印機中進行打印,得到了秦權(quán)壺-可分離模型(圖12) 。
5 結(jié)束語
項目通過建立了一套紫砂壺的數(shù)字化系統(tǒng),創(chuàng)新性地基于MFC使用C++編程實現(xiàn)了整個數(shù)字化的流程,為我國國產(chǎn)紫砂壺的數(shù)字化提供了基礎(chǔ)。同時通過實現(xiàn)兩款經(jīng)典的紫砂壺:秦權(quán)壺和漢掇壺的數(shù)字化,生成對應(yīng)的數(shù)字化文件,并將其打印出成品,驗證了流程的可靠性,還創(chuàng)新性地打印出可分離的茶壺模型。生成的數(shù)字化文件,更加方便地在網(wǎng)上進行傳播[7],同時也能使得紫砂壺的生產(chǎn)更加科學(xué)有效[8]。