申作林,沙晨明
(哈爾濱理工大學(xué),哈爾濱 150040)
?
三角網(wǎng)格文件的格式處理在3D打印技術(shù)中的應(yīng)用
申作林,沙晨明
(哈爾濱理工大學(xué),哈爾濱 150040)
三維模型是計算機圖形學(xué)重要的組成部分,用網(wǎng)格描述的三維模型的表示又是3D打印技術(shù)應(yīng)用的先決條件,而對三角網(wǎng)格文件數(shù)據(jù)結(jié)構(gòu)的認(rèn)識將會直接影響到三維模型的分析處理。常用模型數(shù)據(jù)文件格式的提出,對擴充計算機圖形學(xué)具有重要意義。在詳細(xì)了解3D打印流程基礎(chǔ)上,詳細(xì)分析常用基于三角網(wǎng)格文件的數(shù)據(jù)結(jié)構(gòu),針對目前OFF模型文件組織結(jié)構(gòu)的定義沒有形成系統(tǒng)的規(guī)范問題,完成一種OFF文件網(wǎng)格模型數(shù)據(jù)結(jié)構(gòu)的定義,提出模型互轉(zhuǎn)思想,設(shè)計一種轉(zhuǎn)換算法并進(jìn)行3D打印實驗驗證結(jié)果。
計算機圖形學(xué); 格式轉(zhuǎn)換;三維模型;3D打??;三角網(wǎng)格文件
三維模型是計算機圖形學(xué)中的重要組成部分,目前隨著3D打印技術(shù)的興起,三維模型在計算機應(yīng)用領(lǐng)域的研究中也扮演了更重要的角色。3D打印技術(shù)是制造業(yè)正在飛速發(fā)展的一項新興技術(shù),被稱為“具有工業(yè)革命意義的制造技術(shù)”。美國《時代》周刊也將3D打印列為“美國十大增長最快的工業(yè)”之一。對于這一空前的技術(shù)而言,它有著必然的優(yōu)勢,如:工業(yè)制造上無須模具即可加工、產(chǎn)出品多樣化、支持個性定制、降低技術(shù)門檻等。然而,在這種優(yōu)勢下也存在一系列問題,如:難以尋找具有優(yōu)良性能的可打印耗材、打印經(jīng)濟代價昂貴、打印操作過于復(fù)雜、用于打印的模型冗雜且處理方式不規(guī)范導(dǎo)致打印效率低下等。針對3D打印模型冗雜這一問題,本文將簡述3D打印的常規(guī)流程,提出“云制造+3D打印”的新型模式,論述常見三角網(wǎng)格模型文件的數(shù)據(jù)結(jié)構(gòu),針對OFF模型文件的組織結(jié)構(gòu)設(shè)計模型轉(zhuǎn)換算法,通過實驗做出結(jié)論。
對3D打印流程的詳細(xì)分析,是實現(xiàn)3D打印流程細(xì)節(jié)優(yōu)化的最根本前提。傳統(tǒng)上認(rèn)為,3D打印可大致分為六個部分,如圖1所示。
在這六個部分中,前四項是數(shù)字幾何處理部分,在這里不妨把這四部分稱作“軟處理”部分,而后兩部分為硬件相關(guān)部分,稱作“硬處理”部分。由“軟”、“硬”的劃分可見,三維模型的處理在3D打印應(yīng)用中的重要性。
“云時代”的到來給制造業(yè)帶來了一種全新的流程模式,傳統(tǒng)的3D打印流程未能體現(xiàn)“云時代”的靈活性和多變性,那現(xiàn)在我們不妨思考一種全新的流程模式: 云制造+3D打印。在該模式下,通過基于Web的模型操作平臺處理欲打印的三維模型,亦可通過平臺結(jié)合格式轉(zhuǎn)換器轉(zhuǎn)換文件格式,上傳至三維模型庫或下載至本地,連接3D打印設(shè)備完成操作,如圖2所示。在這種模式下,不僅實現(xiàn)了制造的云處理,而且利用OFF文件模型庫占用空間少這一特點,實現(xiàn)了資源的節(jié)約。
圖1 3D打印流程圖Fig.1 3D printing flow chart
圖2 云制造+3D打印Fig.2 Cloud manufacturing + 3D printing
通過以上的大致分析,已經(jīng)對3D打印流程有了一定的了解,下面本文將對數(shù)字處理階段進(jìn)行解析。
模型文件作為3D打印機的基本輸入將直接影響到3D打印的效率。對常用模型數(shù)據(jù)文件格式及文件內(nèi)部組織結(jié)構(gòu)的分析,有利于更深入的研究模型優(yōu)化算法,下面將介紹三種常用模型數(shù)據(jù)文件格式。
2.1 OBJ文件的數(shù)據(jù)結(jié)構(gòu)
OBJ文件是Alias| Wavefront公司為它的一套3D建模和動畫軟件“Advanced Visualizer”而開發(fā)的3D模型文件格式,該格式以純文本的形式存儲了模型的頂點、面片、法線及紋理坐標(biāo)等使用信息。這種文件格式由于結(jié)構(gòu)簡單,通常是各種模型文件格式轉(zhuǎn)換的中間文件。
2.2 STL文件的數(shù)據(jù)結(jié)構(gòu)
STL同樣也是采用三角形面片進(jìn)而離散的表示三維模型,STL已成為快速原型技術(shù)領(lǐng)域的接口標(biāo)準(zhǔn)。對于STL文件來說,它是由一系列無序的三角面片組成,而三角面片是直接用點來表示的,沒有用來反映三角面片之間的拓?fù)潢P(guān)系,并且每個三角面片都與相鄰的三角面片之間共用兩個頂點。以部分STL文件片段為例進(jìn)行分析,分析如下:
solid STL File
Facet normal 0.000000e+000 0.000000e+000 8.729460e+000
outer loop
Vertex 6.198058e-001 2.317201e+001 3.826742e+001
Vertex 6.198058e-001 2.273891e+001 3.826742e+001
Vertex 6.376099e-001 2.318196e+001 3.826742e+001
endloop
endfacet
...
endsolid STL File
片段中以solid關(guān)鍵字開頭,指定了文件名,第二行用facet normal關(guān)鍵字指定了指向模型外部的面片法向量,隨后以outer loop和endloop為一對關(guān)鍵字描述三角形的三個頂點,endfacet是面片定義結(jié)束,endsolid 意味著STL文件的結(jié)束。
STL文件的數(shù)據(jù)結(jié)構(gòu)只能描述三維模型的幾何信息,不能表示樣式信息,這區(qū)別于OBJ文件,STL是計算機圖形學(xué)、數(shù)字幾何處理、數(shù)字幾何工業(yè)應(yīng)用等領(lǐng)域最常用的文件格式,亦是三維打印機支持的最常見文件格式。
2.3 OFF文件的數(shù)據(jù)結(jié)構(gòu)
利用三角形圖元可以近似逼近出幾乎所有的三維立體模型,這種逼近方法也是多數(shù)三維網(wǎng)格數(shù)據(jù)文件所采用的方法。OFF( Object Format File )文件也采用了這種方法,它利用點和邊組成許多空間三角形來逼近三維模型表面。與其他文件不同,OFF文件的數(shù)據(jù)只支持ASCII格式存儲,利用ASCII格式存儲的優(yōu)點是可讀性強,方便理解數(shù)據(jù)。下面再看一個例子,來理解OFF的數(shù)據(jù)結(jié)構(gòu)。
OFF
4 4 6
0.0 0.0 2.0
1.632993 -0.942809 -0.666667
0.000000 1.885618 -0.666667
-1.632993 -0.942809 -0.666667
3 1 0 3
3 2 0 1
3 3 0 2
3 3 2 1
圖3 OFF文件顯示圖Fig.3 OFF document display image
如圖3所示為該OFF文件的顯示圖。由示例可知,OFF文件與OBJ文件非常相似,只不過與OFF相比OBJ文件多了一組表示信息,例子中的第二行“4 4 6”,分別代表模型頂點數(shù),三角面片數(shù),邊數(shù)。隨后是頂點坐標(biāo)及三角面片,拿一個面片為例:“3 1 0 3”中第一個“3”代表隨后跟著3個點的索引值,值得注意的是,索引值從0開始( 與OBJ文件不同 )。與STL相似,OFF也沒有表示模型樣式的相關(guān)信息,這很方便進(jìn)行OFF到STL的轉(zhuǎn)換。
盡管在計算機圖形學(xué)方面有所建樹的國內(nèi)外學(xué)者對三維圖形有了深入的研究,但是對于OFF文件數(shù)據(jù)結(jié)構(gòu)的定義卻沒有形成一種規(guī)范定義。在對OFF模型的數(shù)據(jù)結(jié)構(gòu)有了一定的了解之后,本小節(jié)試圖給出OFF描述的三維模型的定義。
3.1 頂點的定義
從集合論的角度很容易得到如下頂點的定義:
V:{p1(x1,y1,z1),…,pn(xn,yn,zn)}
使用C++語言描述的頂點部分定義如下:
Class Vector
{
unsigned int id; /*頂點標(biāo)識*/
float x,y,z; /*頂點坐標(biāo)*/
};
3.2 面片的定義
設(shè)面片集合:
S:{s1,s2,…,sn}
根據(jù)頂點的定義,有映射:
f:V→S
sn=f(pn,pm,pv)
其中pn,pm,pv∈V,sn∈S
得到面片集為:
S:{sn|sn=f(pn,pm,pv),p∈V}
使用C++語言描述的三角面片部分定義如下:
Class Triangle
{
unsigned int id; /*面片標(biāo)識*/
int verts[3]; /*三角形的三個點的標(biāo)識*/
int nverts; /*頂點索引個數(shù)*/
};
3.3 網(wǎng)格模型的定義
有了上述頂點和面片的定義,很容易完成網(wǎng)格模型的定義。
網(wǎng)格定義如下:
M:{(V,S)}
其中V是包含全部頂點的集合,S是包含由3個V集合上的點所組成的面片集合。
使用C++語言描述的網(wǎng)格模型部分定義如下:
class CMesh
{
Vertex * vertex; /*點集合*/
Triangle * triangle; /*面片集合*/
...
int nVertices,nTriangles,nEdges;
/*存儲相關(guān)數(shù)目*/
public:
void Read();
void RenderScene();
...
};
3.4 網(wǎng)格模型的操作
根據(jù)上述模型的定義,可以結(jié)合OpenGL編程技術(shù)進(jìn)行模型的讀取及繪制操作,OpenGL編程技術(shù)的使用能更好的實現(xiàn)三維模型的立體感和真實感,在繪圖方面更加有優(yōu)勢。圖4為OpenGL顯示效果圖,可以利用OpenGL提供的各種API接口實現(xiàn)模型的顯示。
下面部分代碼使用了部分繪圖函數(shù):
void CMesh:: RenderScene(){
...
for(int i=0;i glBegin(GL_TRANGLES); glVertex3f(vertex[i].x,vertex[i].y, vertex[i].z); glVertex3f(vertex[i+1].x,vertex[i+1].y, vertex[i+1].z); glVertex3f(vertex[i+2].x,vertex[i+2].y, vertex[i+2].z); glEnd();} ... } 圖4 OFF模型顯示示例Fig.4 OFF model display scale 3.5 模型互轉(zhuǎn)研究 研究常用三維網(wǎng)格數(shù)據(jù)文件格式之間的轉(zhuǎn)換,無論對于擴充計算機圖形學(xué)還是更好地應(yīng)用3D打印技術(shù)來說,都具有非常重要意義。基于上述分析,我們已經(jīng)對常用模型數(shù)據(jù)文件格式( OBJ、STL、OFF ) 的內(nèi)部數(shù)據(jù)組織結(jié)構(gòu)有了一定了解,下面本文將根據(jù)模型的定義分析三種文件的各自特點,提出轉(zhuǎn)換思想。 前面提到的OBJ文件很適合用于模型之間的互轉(zhuǎn),所以本小節(jié)著重分別分析OBJ與STL、OFF的聯(lián)系和區(qū)別。從OBJ文件中可以很容易找到與STL文件、OFF文件的一些聯(lián)系和區(qū)別。 A.OBJ文件可以存儲模型的樣式等信息,而STL文件與OFF文件并沒有相關(guān)表示信息,所以在設(shè)計轉(zhuǎn)換時只需舍去樣式表示信息即可。 B.OBJ文件與OFF文件用索引表示三角面片,但兩者表示范圍不同,OBJ文件的點索引下標(biāo)從1開始, OFF文件的點索引下標(biāo)從0開始。STL用outer loop和endloop關(guān)鍵字結(jié)合三個頂點描述三角形面片,所以在設(shè)計轉(zhuǎn)換時使用適當(dāng)?shù)谋硎痉椒纯伞?/p> C.OBJ文件與STL文件均可存儲面片法向量信息,而OFF文件沒有相關(guān)表示信息。所以在設(shè)計轉(zhuǎn)換時,需要計算面片法向量。 D.OFF文件存儲了相關(guān)點、邊及面片的數(shù)量信息,而OBJ文件與STL文件沒有明確給出,所以在設(shè)計轉(zhuǎn)換時需要計算相關(guān)信息數(shù)目。 通過以上分析可以發(fā)現(xiàn),利用文件的各自特點,通過使用提供的索引信息,使用幾何學(xué)中的向量法,可求出表示STL文件所用的法向量,進(jìn)而得到3D打印需要的STL文件格式。 3.6 一種簡單的OFF到STL的轉(zhuǎn)換算法 OFF文件和STL文件同樣采用二進(jìn)制文本信息來描述三維模型的方式,但是OFF文件通過其特有的數(shù)據(jù)結(jié)構(gòu),較STL文件在數(shù)據(jù)存儲上占有一定的優(yōu)勢,這種優(yōu)勢在建立大型三維模型庫、云制造的資源空間等應(yīng)用上表現(xiàn)得更加明顯。因此,可以利用OFF文件存儲空間較小這一特點,應(yīng)用OFF模型文件處理平臺對OFF文件進(jìn)行預(yù)處理操作,再通過調(diào)用轉(zhuǎn)換算法完成模型轉(zhuǎn)換,來達(dá)到節(jié)約時間和空間的目的。 圖5 轉(zhuǎn)換算法流程Fig.5 Transition algorithm flow path 圖5描述了轉(zhuǎn)換算法的流程,下面將實現(xiàn)轉(zhuǎn)換算法代碼: Void Transformation algorithm ( CMesh inputMesh/*輸入模型文件*/ ) { FILE*fout=fopen(“D://outputMesh.stl”,“w”); //打開輸出文件 for(int i = 0; i //遍歷表示模型的所有三角形 { Vector vertexA, vertexB, vertexC, tempVector1, tempVector2, normalVector; //結(jié)點的獲取 vertexA.x=inputMesh.vertex[inputMesh.triangle[i].verts[0]].x; VertexA.y=inputMesh.vertex[inputMesh.triangle[i].verts[0]].y; vertexA.z=inputMesh.vertex[inputMesh.triangle[i].verts[0]].z; /*用第i個三角形的第0個點的索引值來訪問第i個三角形的第0個點的坐標(biāo)值*/ vertexB.x=inputMesh.vertex[inputMesh.triangle[i].verts[1]].x; vertexB.y=inputMesh.vertex[inputMesh.triangle[i].verts[1]].y; vertexB.z=inputMesh.vertex[inputMesh.triangle[i].verts[1]].z; /*用第i個三角形的第1個點的索引值來訪問第i個三角形的第1個點的坐標(biāo)值*/ vertexC.x=inputMesh.vertex[inputMesh.triangle[i].verts[2]].x; vertexC.y=inputMesh.vertex[inputMesh.triangle[i].verts[2]].y; vertexC.z=inputMesh.vertex[inputMesh.triangle[i].verts[2]].z; /*用第i個三角形的第2個點的索引值來訪問第i個三角形的第2個點的坐標(biāo)值*/ //法向量計算區(qū)域 tempVector1.x = vertexB.x-vertexA.x; tempVector1.y = vertexB.y-vertexA.y; tempVector1.z = vertexB.z-vertexA.z; tempVector2.x = vertexC.x-vertexA.x; tempVector2.y = vertexC.y-vertexA.y; tempVector2.z = vertexC.z-vertexA.z; normalVector.x=tempVector1.y*tempVector2.z-tempVector1.z*tempVector2.y; normalVector.y=tempVector1.z*tempVector2.x-tempVector1.x*tempVector2.z; normalVector.z=tempVector1.x*tempVector2.y-tempVector1.y*tempVector2.x; //單位化法向量 float mol= sqrt(normalVector.x*normalVector.x+normalVector.y*normalVector.y+normalVector.z*normalVector.z); //向量的模 normalVector.x=normalVector.x/mol; normalVector.y=normalVector.y/mol; normalVector.z=normalVector.z/mol; fwrite();//按照STL格式寫入關(guān)鍵字 } fclose(fout);//關(guān)閉文件 } 實驗步驟:本實驗在VC++6.0平臺上實現(xiàn)轉(zhuǎn)換算法,并完成若干模型的轉(zhuǎn)換得到3D打印需要的STL文件格式。使用型號為BI V2.0的實驗型3D打印機,如圖6所示。實驗耗材選用ABS樹脂,模型使用計算機虛擬合成的三維模型,原始模型如圖7中M1所示。實驗利用的簡化基本操作為邊折疊,采用誤差測度-二次誤差度量算法,并將簡化測度化簡為計算簡單的遞推表達(dá)式的方法預(yù)處理原始模型文件,得到M2所示模型。 圖6 BI V2.0 3D打印機Fig.6 BI V2.0 3D printer 利用以上模型,調(diào)節(jié)切片厚度,填充密度級別并保持其他參數(shù)不變的前提下進(jìn)行打印測試,欲打印模型大小為(W,D,H:100.0 mm,45.07 mm,73.12 mm)。其他主要控制參數(shù)見表1。 圖7 模型簡化Fig.7 Model simplification 表1 其他主要控制參數(shù) 新一代信息技術(shù)與制造業(yè)的融合,正引發(fā)影響深遠(yuǎn)的全球產(chǎn)業(yè)革命,更為我國制造業(yè)的轉(zhuǎn)型升級、創(chuàng)新發(fā)展提供重大機遇,在《中國制造2025》的強國戰(zhàn)略下,從“中國制造”到“中國智造”,全面提升產(chǎn)業(yè)技術(shù)水平和國際競爭力刻不容緩。對于3D打印這一具有跨時代意義的技術(shù)而言,大力推動其發(fā)展不僅可以促進(jìn)制造業(yè)轉(zhuǎn)型升級,更可為我國科學(xué)研究工作貢獻(xiàn)強大的力量。 [1] 劉利剛,徐文鵬,王偉明,等.3D打印中的幾何計算研究進(jìn)展[J].計算機學(xué)報,2015,(06):1243-1267. [2] 嚴(yán)梽銘,鐘艷如.基于VC++和OpenGL的STL文件讀取顯示[J].計算機系統(tǒng)應(yīng)用,2009,18(03):172-175. [3] 沙晨明,申作林,申可心.三角網(wǎng)格文件OFF的格式分析及OFF到STL的轉(zhuǎn)化[J].計算機系統(tǒng)應(yīng)用,2016,(04):232-236. [4] 劉源.三維幾何模型的重建與結(jié)構(gòu)優(yōu)化[D].合肥:中國科學(xué)技術(shù)大學(xué),2015. [5] 胡瑞珍,黃惠.3D打印啟發(fā)下的模型實例化優(yōu)化研究綜述[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2015,(06):961-967. [6] 曾龍,劉永進(jìn),張東亮.面向三維打印的特征驅(qū)動輪廓線編輯方法[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2015,(06):974-983. [7] 衛(wèi)煒,周來水,張麗艷.海量STL文件的快速讀取與顯示[J].機械科學(xué)與技術(shù),2006,25(08):935-938,975. [8] 牛振華,付婭琦,董遷遷. 3D打印速度的研究[J].江蘇科技信息,2014,(07):61-62. [9] 王勝法,李寶軍,呂掌權(quán),等.面向三維打印的殼狀結(jié)構(gòu)汽車及部件模型輕量化建模[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2015,(06):968-973. [10] 李小麗,馬劍雄,李萍,等.3D打印技術(shù)及應(yīng)用趨勢[J].自動化儀表,2014,(01):1-5. The geometry of triangular mesh file processing in the application of 3D printing SHEN Zuo-lin, SHA Chen-ming (Harbin University of Science and Technology, Harbin 150040, China) Three dimensional model plays an important part in computer graphics, and the 3D model of mesh description is the precondition of 3D printing application. Understanding of the data structure of triangular mesh file will directly affect the processing of 3D model. Commonly used model data file format is of great significance to the expansion of computer graphics. On the basis of detailed understanding of the 3D printing process, a detailed analysis of the commonly used data structure based on the triangular grid file was made. In view of the problem that the definition of the structure of the OFF model file is not standardized, this paper defines the data structure of the OFF model, presents ideas of a model for transformation, designs a transformation algorithm and designs an experiment to verify the results through 3D printing. Computer graphics; Format conversion; 3D Model; 3D printing; Triangular mesh file 2017-01-06 黑龍江省大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練項目(201510214027) 申作林(1995-),男,本科在讀學(xué)生。 沙晨明(1981-), 女,碩士,講師。 TP391.41 A 1674-8646(2017)02-0018-054 實驗
5 結(jié)語