于 倩,顧宏斌,湯 勇
(南京航空航天大學(xué)民航學(xué)院,江蘇 南京 210016)
機(jī)械產(chǎn)品開(kāi)發(fā)過(guò)程一般是先在CAD系統(tǒng)中完成零件的設(shè)計(jì)建模,然后在虛擬現(xiàn)實(shí)(VR)環(huán)境中進(jìn)行產(chǎn)品的各種分析,如虛擬裝配、運(yùn)行過(guò)程仿真和人機(jī)工程等。這類(lèi)VR系統(tǒng)的模型信息主要來(lái)源于CAD系統(tǒng)輸出的多邊形面片模型。CAD模型采用精確的數(shù)學(xué)形式表達(dá)模型的幾何信息,因此該模型轉(zhuǎn)換為多邊形面片模型格式后,幾何外形精確但面片數(shù)量龐大,一般無(wú)法直接滿足VR系統(tǒng)實(shí)時(shí)渲染要求,必須通過(guò)一定的簡(jiǎn)化算法精簡(jiǎn)模型。雖然目前存在很多網(wǎng)格簡(jiǎn)化算法[1-2],并已經(jīng)運(yùn)用到了實(shí)際系統(tǒng)中,實(shí)現(xiàn)了CAD模型到VR面片模型的轉(zhuǎn)換和應(yīng)用,但復(fù)雜的CAD模型難以滿足實(shí)時(shí)要求仍是該類(lèi)系統(tǒng)有待解決的一個(gè)難題。由于這些系統(tǒng)中采用的簡(jiǎn)化算法主要針對(duì)的是通用模型(無(wú)規(guī)則外形),如通過(guò)掃描設(shè)備得到的點(diǎn)云模型,因此并不能有效地簡(jiǎn)化CAD模型。應(yīng)用這些算法可能會(huì)破壞CAD模型上的邊界特征(即幾何設(shè)計(jì)特性),使得模型變得不可識(shí)別,易產(chǎn)生狹長(zhǎng)的病態(tài)三角形(影響光照計(jì)算,降低視覺(jué)效果)。
針對(duì)CAD模型數(shù)據(jù)轉(zhuǎn)換存在的上述問(wèn)題,提出并實(shí)現(xiàn)了一種新的基于分類(lèi)的自適應(yīng)CAD模型簡(jiǎn)化和轉(zhuǎn)換方法,試圖將各類(lèi)復(fù)雜CAD模型根據(jù)需要轉(zhuǎn)換為多分辨率(LOD)的VR模型,并在保證模型幾何外形和視覺(jué)效果的前提下滿足VR系統(tǒng)中實(shí)時(shí)渲染的需求。
一般的CAD模型轉(zhuǎn)換為虛擬現(xiàn)實(shí)模型是通過(guò)內(nèi)嵌于CAD系統(tǒng)的數(shù)據(jù)導(dǎo)出接口將模型數(shù)據(jù)轉(zhuǎn)換為中性文件或其他幾何模型。分析發(fā)現(xiàn)CAD系統(tǒng)數(shù)據(jù)接口是按照一定規(guī)則導(dǎo)出幾何數(shù)據(jù)的。比如CATIA導(dǎo)出中性文件模型時(shí),參數(shù)化的實(shí)體模型面片化后,三角面的排列順序有規(guī)律,即滿足同一參數(shù)方程的面片按線性順序排列,且其三角化的三角形分布和數(shù)量都一定。比如對(duì)一球面,其直徑和球心的變化不會(huì)影響三角形的分布和數(shù)量。根據(jù)這個(gè)特點(diǎn),對(duì)網(wǎng)格數(shù)據(jù)進(jìn)行分類(lèi),根據(jù)不同的類(lèi)型對(duì)其采用不同的多分辨率簡(jiǎn)化,簡(jiǎn)化完成后將幾何數(shù)據(jù)寫(xiě)成VR模型標(biāo)準(zhǔn)格式。CAD模型簡(jiǎn)化與轉(zhuǎn)換原理圖如圖1所示。
圖1 CAD模型簡(jiǎn)化與轉(zhuǎn)換原理圖
商用 CAD軟件,如 CATIA,Pro/ENGINEER等,都能通過(guò)內(nèi)置的數(shù)據(jù)導(dǎo)出接口將其導(dǎo)成stl,wrl等通用的中性文件。VRML是一個(gè)文本文件,是描述虛擬環(huán)境場(chǎng)景的一種標(biāo)準(zhǔn)。它的格式非常簡(jiǎn)單易于解析,包含了所有完整的幾何運(yùn)動(dòng)信息及紋理映射等。一個(gè)典型的CAD模型是用點(diǎn)、線、面來(lái)描述的,其中每個(gè)面集由一組相鄰的三角面組成。按照文獻(xiàn)[3]中的方法解析wrl文件可得到網(wǎng)格數(shù)據(jù)。
為了精確地找到CAD系統(tǒng)導(dǎo)出的網(wǎng)格數(shù)據(jù)分類(lèi)規(guī)則,首先針對(duì)CATIA軟件中的基本設(shè)計(jì)工具進(jìn)行實(shí)驗(yàn)和匯總分析,實(shí)驗(yàn)結(jié)果如圖2所示。
圖2 常用的設(shè)計(jì)工具方法匯總表(其中邊界線由黑色注明)
通過(guò)實(shí)驗(yàn)分析匯總,根據(jù)點(diǎn)和邊界線的關(guān)系,可將面分為兩大類(lèi):①面上的點(diǎn)都是邊界線上的點(diǎn);②面上的點(diǎn)不全是邊界線上的點(diǎn)。
第1類(lèi)的面,讀取到的點(diǎn)集恰好都落在其相對(duì)應(yīng)的邊界線上,三角面片的點(diǎn)取的都是邊界線上的點(diǎn)。這類(lèi)型的面,比較簡(jiǎn)單、平緩,在進(jìn)行下一步簡(jiǎn)化時(shí),只需簡(jiǎn)化邊界線上的點(diǎn)即可[4-5];
第2類(lèi)的面,讀取到的點(diǎn)集并不全落在其相對(duì)應(yīng)的邊界線上,三角面片的點(diǎn)一部分取的是邊界線上的點(diǎn),一部分卻是面內(nèi)部區(qū)域中的點(diǎn)。這類(lèi)型的面比較復(fù)雜,三角面片的數(shù)量也比較多,相對(duì)應(yīng)的簡(jiǎn)化算法比第1類(lèi)的面要復(fù)雜[6-7]。
第1類(lèi)的面又分為有孔面和無(wú)孔面,這是由于在設(shè)計(jì)CAD模型時(shí),用凹槽、孔等設(shè)計(jì)工具所產(chǎn)生的,簡(jiǎn)化時(shí)應(yīng)進(jìn)行針對(duì)性的簡(jiǎn)化。
第2類(lèi)的面主要是一些復(fù)雜的曲面,如球面、樣條曲面和自由曲面等,根據(jù)設(shè)計(jì)工具以及網(wǎng)格數(shù)據(jù)的特點(diǎn),又把第2類(lèi)的面分為旋轉(zhuǎn)面和自由曲面,在CAD系統(tǒng)中有大量的旋轉(zhuǎn)設(shè)計(jì)工具,如旋轉(zhuǎn)體,旋轉(zhuǎn)槽等,同時(shí)樣條曲線也應(yīng)用較多。在此基礎(chǔ)上,根據(jù)各種面的特點(diǎn),設(shè)計(jì)一定的算法準(zhǔn)則進(jìn)一步細(xì)分網(wǎng)格模型,在讀取到中性文件的幾何信息后,根據(jù)分類(lèi)法則,對(duì)模型的各個(gè)面進(jìn)行分類(lèi),如表1 所示[8]。
一個(gè)典型的CAD模型是由大量的參數(shù)曲面組成的,而這些參數(shù)曲面是由幾何設(shè)計(jì)特性決定的,當(dāng)用戶看CAD模型時(shí),一般感興趣的是其幾何設(shè)計(jì)特性。因此這些幾何設(shè)計(jì)特性應(yīng)該在可視化后被保存,目前存在的簡(jiǎn)化算法在進(jìn)行簡(jiǎn)化時(shí),并沒(méi)有考慮到CAD模型的幾何設(shè)計(jì)特性,因而當(dāng)這些算法刪除幾何元素如邊、點(diǎn)、面時(shí),很可能刪掉了一些對(duì)設(shè)計(jì)特性來(lái)說(shuō)很重要的幾何元素。
2.3.1 第1類(lèi)網(wǎng)格簡(jiǎn)化
第1類(lèi)的面比較平坦,如平面、柱面等。在原始模型中,其面上的點(diǎn)全部都是其對(duì)應(yīng)的邊界線上的點(diǎn),因此只需要對(duì)邊界線上的點(diǎn)進(jìn)行簡(jiǎn)化即可。算法實(shí)現(xiàn)如下:
(1)首先初始化簡(jiǎn)化因子N。為了避免生成過(guò)于狹長(zhǎng)的三角形,影響光照效果,N滿足:N=i,min{};di為第i點(diǎn)與第一個(gè)點(diǎn)的距離,do為與其相對(duì)應(yīng)的邊界線l2的距離。i=1,2,…,n-2(n為邊界線點(diǎn)的個(gè)數(shù),點(diǎn)的索引從0開(kāi)始);
(2)If i mod N=0,i=1,2,…,n-2,則 i作為合并點(diǎn);
表1 網(wǎng)格分類(lèi)表
(3)循環(huán),直到線上所有點(diǎn)遍歷結(jié)束。把起始點(diǎn)、合并點(diǎn)及結(jié)束點(diǎn)存入到新模型中;
(4)邊界線通過(guò)新模型的點(diǎn)相互連接。
有孔面和無(wú)孔面的區(qū)別在于邊界線連接方式,前者內(nèi)部邊界線與外部邊界線相連接;后者外部邊界線相互連接[9],如圖3所示。
圖3 兩種連接方式
2.3.2 第2類(lèi)網(wǎng)格簡(jiǎn)化
對(duì)于第2類(lèi)的面,面中的三角形構(gòu)成較復(fù)雜,除了邊界線上的點(diǎn)外,面的內(nèi)部仍存在大量的點(diǎn)和三角形。因而僅簡(jiǎn)化邊界線上的點(diǎn),并不能達(dá)到好的簡(jiǎn)化效果。
自由曲面的簡(jiǎn)化算法。當(dāng)用三角形網(wǎng)格描述物體的表面時(shí),根據(jù)曲率可以較好地區(qū)分表面的一些特征,進(jìn)行簡(jiǎn)化時(shí),在高曲率處應(yīng)保留盡量多的點(diǎn)。根據(jù)這個(gè)規(guī)律,從邊界線開(kāi)始,對(duì)原始網(wǎng)格模型進(jìn)行由右向左,自下至上的逐層簡(jiǎn)化,并通過(guò)自適應(yīng)細(xì)分把細(xì)節(jié)信息增加到簡(jiǎn)化模型中,從而得到較細(xì)的LOD表示。自由曲面的簡(jiǎn)化算法流程圖如圖4所示。
圖4 自由曲面的簡(jiǎn)化算法流程圖
具體的簡(jiǎn)化步驟如下:
(1)設(shè)定簡(jiǎn)化因子N,確定曲面的邊界線l2、l3和l4。
(2)在邊界線l2、l3上,分別取第一個(gè)點(diǎn),最后一個(gè)點(diǎn),及第[n/N]×i個(gè)點(diǎn),i=1,2,…,N-1,把l2、l3分為N段。其中[n/N]為邊界線點(diǎn)的個(gè)數(shù)與簡(jiǎn)化因子N商的整數(shù)。
(3)在每段分段區(qū)間內(nèi),依次取相鄰的3個(gè)點(diǎn) Ni(xi,yi,zi)、Ni+1(xi+1,yi+1,zi+1)、Ni+2(xi+2,yi+2,zi+2),如果 θ=max{arc cos(NiNi+1·Ni+1Ni+2/|NiNi+1|·|Ni+1Ni+2|)},則把第 Ni+1點(diǎn)作為新的分段點(diǎn)。
(4)從線l2的點(diǎn)r2開(kāi)始,找到距離r2最近的點(diǎn) Nbegin,Nbegin∈Ni{Node},Ni{Node}為曲面內(nèi)部點(diǎn)的集合。
由于點(diǎn)都是線性存儲(chǔ)的,且縱橫線上的點(diǎn)都是按照一致的順序排列,因此從Nbegin開(kāi)始,設(shè)定相鄰3個(gè)點(diǎn)的兩兩間距為d、d',如果 d'>>d,則認(rèn)定第2個(gè)點(diǎn)為該線的最后一個(gè)點(diǎn) Nend。在[Nbegin,Nend]中找到離b2最近的點(diǎn) new。
(5)依次找到第 b3,b4,…,bn-1列對(duì)應(yīng)的點(diǎn)new及在邊界線上離Nend最近的l2上的點(diǎn)。
(6)循環(huán),直到線l2上所有的點(diǎn)遍歷結(jié)束。
(7)把點(diǎn)new及三角形存入到新模型中,結(jié)束。
旋轉(zhuǎn)曲面的簡(jiǎn)化。旋轉(zhuǎn)體與軸線相垂直的平面相交,得到的橫截面是一個(gè)半徑隨軸線位置改變的圓,同時(shí)旋轉(zhuǎn)曲面的兩條邊界線是關(guān)于軸線對(duì)稱的,由邊界線上的兩個(gè)對(duì)稱點(diǎn)可以得到該橫截圓的半徑和圓心坐標(biāo),從而得到該橫截圓的表達(dá)式[10]。根據(jù)這個(gè)規(guī)律,旋轉(zhuǎn)曲面的簡(jiǎn)化算法可以表述為:
(1)根據(jù)自由曲面簡(jiǎn)化算法對(duì)兩條邊界線l1、l2進(jìn)行分段。
(2)如果l1、l2的第一個(gè)分段點(diǎn)不相等,則從第一個(gè)分段點(diǎn)開(kāi)始,否則從第2個(gè)分段點(diǎn)開(kāi)始,得到每層橫截圓的表達(dá)式,在該層均勻取N個(gè)點(diǎn)。
(3)循環(huán),直到處理完最后一個(gè)分段點(diǎn)。
(4)把點(diǎn)new及三角形存入到新模型中,結(jié)束。
雖然已將網(wǎng)格數(shù)據(jù)進(jìn)行了簡(jiǎn)化,而要將這些數(shù)據(jù)運(yùn)用到虛擬現(xiàn)實(shí)系統(tǒng)中,必須將其轉(zhuǎn)換成虛擬現(xiàn)實(shí)格式。筆者將其轉(zhuǎn)換成OpenFlight格式。OpenFlight格式是美國(guó)MultiGen Paradigm公司開(kāi)發(fā)的一種場(chǎng)景描述數(shù)據(jù)庫(kù)規(guī)范,是邏輯化的有層次的視景描述數(shù)據(jù)庫(kù),其開(kāi)放的連接及簡(jiǎn)易交互式的操作與細(xì)節(jié)等級(jí)等先進(jìn)的實(shí)時(shí)功能極大地提高了實(shí)時(shí)系統(tǒng)的性能,已經(jīng)成為虛擬現(xiàn)實(shí)領(lǐng)域的工業(yè)標(biāo)準(zhǔn)格式。
一個(gè)基本的完整OpenFlight文件創(chuàng)建讀寫(xiě)算法流程如圖5所示,主要包括程序初始化、創(chuàng)建數(shù)據(jù)庫(kù)頭節(jié)點(diǎn)、創(chuàng)建組節(jié)點(diǎn)和其他特殊節(jié)點(diǎn)、繪制幾何節(jié)點(diǎn)、建立節(jié)點(diǎn)間的層級(jí)關(guān)系、寫(xiě)入并關(guān)閉數(shù)據(jù)庫(kù)和程序退出等步驟。
圖5 OpenFlight模型數(shù)據(jù)庫(kù)處理流程
在Pentium4、2.93 GHz、1 G內(nèi)存的PC機(jī)上,采用CAD軟件(CATIA)、Visual C++和.NET編寫(xiě)了CAD模型的解析與簡(jiǎn)化程序,圖6和圖7是一個(gè)簡(jiǎn)單的自由曲面與綜合體的簡(jiǎn)化實(shí)例。
圖6 簡(jiǎn)化前后的自由曲面
圖7 簡(jiǎn)化前后的綜合體
圖8(a)為一個(gè)含有11956個(gè)三角形的大齒輪模型,圖8(b)為基于二次誤差方法的簡(jiǎn)化結(jié)果。圖8(c)為筆者算法的簡(jiǎn)化結(jié)果。
圖8 三角形大齒輪原始和簡(jiǎn)化后的模型
從上述CAD模型經(jīng)過(guò)筆者的算法簡(jiǎn)化和轉(zhuǎn)換后的試驗(yàn)結(jié)果可以看出:①模型幾何外形和視覺(jué)效果基本無(wú)變化,在保證外形輪廓基本無(wú)損失的條件下,復(fù)雜CAD模型面片數(shù)均可簡(jiǎn)化90%左右,三角形的數(shù)量大大減少。②基于二次誤差的簡(jiǎn)化方法雖然也較好地保持了幾何外形,但是簡(jiǎn)化后的三角形仍然很密集,狹長(zhǎng);筆者的方法無(wú)病態(tài)、狹長(zhǎng)三角形,分布基本是規(guī)則的三角形。③根據(jù)設(shè)定的簡(jiǎn)化因子,可以進(jìn)行不同簡(jiǎn)化率下的模型簡(jiǎn)化,且在曲率大的區(qū)域可以進(jìn)行自適應(yīng)細(xì)分。④對(duì)于大型模型,簡(jiǎn)化后的模型實(shí)時(shí)渲染幀率也能大幅提高。
針對(duì)虛擬現(xiàn)實(shí)系統(tǒng)中CAD模型需求,提出并實(shí)現(xiàn)了一種面向虛擬現(xiàn)實(shí)的CAD模型的分類(lèi)簡(jiǎn)化和轉(zhuǎn)換方法。實(shí)驗(yàn)結(jié)果表明該方法切實(shí)可行,簡(jiǎn)化后的模型在外形上較好地保持了原始模型的幾何特征,并生成了多層次細(xì)節(jié)模型,也同時(shí)滿足了視景系統(tǒng)的實(shí)時(shí)渲染要求,可運(yùn)用于實(shí)際系統(tǒng)中。
[1]JEZEMIK A G H.A solution to integrate computeraided design(CAD)and virtual reality(VR)databases in design and manufacturing processes[J].International Journal of Advanced Manufacturing Technology,2003(22):768-774.
[2]萬(wàn)畢樂(lè),劉檢華,寧汝新,等.面向虛擬裝配的CAD模型轉(zhuǎn)換接口的研究與實(shí)現(xiàn)[J].系統(tǒng)仿真學(xué)報(bào),2006,18(2):391-394.
[3]彭云云.利用CAD數(shù)據(jù)的視景仿真三維建模及其模型簡(jiǎn)化技術(shù)研究[D].南京:南京航空航天大學(xué)圖書(shū)館,2009.
[4]GRAF H,BRUNETTI G,STORK A,et al.A methodology supporting the preparation of 3D-CAD data for design reviews in VR[C]//Design2002.Dubrovnik:[s.n.],2002:489-495.
[5]陶志良,潘志庚,石教英.基于能量評(píng)估的網(wǎng)格簡(jiǎn)化算法及其應(yīng)用[J].軟件學(xué)報(bào),1997,8(12):881-888.
[6]高鵬東,劉曉利,劉則毅.基于尖特征度的邊折疊簡(jiǎn)化算法[J].軟件學(xué)報(bào),2005,16(5):669-675.
[7]RICHARD S,WRITE J.OpenGL超級(jí)寶典[M].2版.張琪,付飛,譯.北京:人民郵電出版社,2001:54-88.
[8]GROSS H,GATTI R,STAADT O.Fast multire solution surface meshing[C]//Proceedings of the IEEE VIsualization'95.Atlanta GA:[s.n.],1995:135-142.
[9]王俊東,羅學(xué)科,劉玉明.虛擬現(xiàn)實(shí)技術(shù)在科技奧運(yùn)中的應(yīng)用[J].北方工業(yè)大學(xué)學(xué)報(bào),2005,17(3):15-18.
[10]DEROSE T,LOUNSBERY M,WARREN J.Multiresolution analysis for surfaces of arbitrary topological type[J].ACM Transactions on Graphics,1997,16(1):34-73.