黃良強,朱 焱,丁國富
(1.西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,四川 成都 611756; 2.西南交通大學(xué) 機械工程學(xué)院先進設(shè)計與制造技術(shù)研究所,四川 成都 610031)
2015年7月4日,《國務(wù)院關(guān)于積極推進“互聯(lián)網(wǎng)+”行動的指導(dǎo)意見》發(fā)布,要求將互聯(lián)網(wǎng)的創(chuàng)新成果與經(jīng)濟社會各領(lǐng)域深度融合,進一步促進社會發(fā)展[1]?!盎ヂ?lián)網(wǎng)+”意味著“互聯(lián)網(wǎng)+各個傳統(tǒng)行業(yè)”,但這并不是簡單的兩者相加,而是利用信息通信技術(shù)以及互聯(lián)網(wǎng)平臺,讓互聯(lián)網(wǎng)與傳統(tǒng)行業(yè)進行深度融合[2],充分發(fā)揮互聯(lián)網(wǎng)在生產(chǎn)要素配置中的優(yōu)化和集成作用,提升實體經(jīng)濟的創(chuàng)新力和生產(chǎn)力,形成更廣泛的以互聯(lián)網(wǎng)為基礎(chǔ)設(shè)施和實現(xiàn)工具的經(jīng)濟發(fā)展新形態(tài)[3]。
在傳統(tǒng)制造業(yè)標(biāo)準(zhǔn)化、規(guī)?;a(chǎn)模式下,企業(yè)往往會以產(chǎn)品定銷售,而消費者需求往往難以預(yù)估。隨著信息化、個性化時代到來,產(chǎn)品設(shè)計服務(wù)提供方及時準(zhǔn)確獲悉用戶的產(chǎn)品需求,設(shè)計出相符的產(chǎn)品,讓用戶及時便捷地查看設(shè)計樣品,提出進一步的優(yōu)化需求,以實現(xiàn)更加精準(zhǔn)的個性化服務(wù)。如圖1所示,面向互聯(lián)網(wǎng)+的產(chǎn)品數(shù)字化設(shè)計與制造服務(wù)平臺就是這樣一種能架構(gòu)起產(chǎn)品需求方與產(chǎn)品設(shè)計服務(wù)提供方的橋梁。
“互聯(lián)網(wǎng)+”和云平臺軟件即服務(wù)(SaaS)技術(shù),把一系列可共享的軟件資源放置在云端,用戶可隨時使用移動終端設(shè)備訪問云平臺中的軟件資源,查看設(shè)計的產(chǎn)品是否滿足需求,并實時根據(jù)需求查看、設(shè)計、修改3D數(shù)字化產(chǎn)品模型,加速資源共享,實現(xiàn)資源利用最大化。本文研發(fā)內(nèi)容作為該平臺的子模塊之一,以“互聯(lián)網(wǎng)+制造業(yè)”為背景,對3D數(shù)字化產(chǎn)品移動端可視化進行研究。
圖1 平臺架構(gòu)
隨著智能手機的普及,設(shè)計師可利用移動端(手機、平板電腦等移動智能設(shè)備)進行3D數(shù)字化產(chǎn)品設(shè)計研發(fā)工作。本文研發(fā)成果可不受設(shè)備、時間、地點等條件限制,實現(xiàn)多角度、3D立體觀察數(shù)字化產(chǎn)品模型,便于用戶提出修改意見,方便設(shè)計師和客戶交互,提高研發(fā)效率。
安卓占據(jù)智能手機銷量的87.2%[5],因此,本文的研發(fā)工作基于Android OS的智能手機平臺。
3D模型可使用多種文件格式表達,如STL、OBJ、MAX等。OBJ格式表達的3D模型是一種標(biāo)準(zhǔn)的3D模型文件,由于OBJ文件適用于不同文件格式的3D模型之間互導(dǎo),且當(dāng)前大多數(shù)3D繪圖軟件都支持OBJ格式的讀、寫等操作,因此可利用OBJ文件模型作為基礎(chǔ)模型,把不同文件格式的3D模型轉(zhuǎn)化為OBJ文件,最后利用移動端可視化技術(shù)對其進行可視化操作。OBJ文件是一種文本文件,可直接用寫字板、Word等文本編輯工具進行查看和修改,因此本文的可視化研發(fā)工作基于OBJ文件。
OBJ支持多種幾何圖形,包括直線(Line)、表面(Surface)、多邊形(Polygon)和自由形態(tài)曲線(Free-form Curve),主要特點有:
(1)它是一種3D模型的骨架性文件,包含模型在3D空間中的幾何信息,但不包含動畫、材質(zhì)特性、貼圖、貼圖路徑等信息。
(2)支持法線和貼圖坐標(biāo)。
(3)不包含面的顏色定義信息,但可以引用材質(zhì)庫,材質(zhì)庫信息儲存在后綴為".mtl"的獨立材質(zhì)庫文件中。
OBJ是文本格式,每行由標(biāo)識字母也即關(guān)鍵字打頭,關(guān)鍵字標(biāo)識該行數(shù)據(jù)所表示的含義,注釋行以符號‘#’開始。
OBJ格式的3D刀具模型文件內(nèi)容如下:
# 創(chuàng)建時間:11.10.2017 14:50:59
mtllib D10-3.mtl
v 2.6327-47.00001.4383
v 1.5514-48.00001.2622
……
vn -0.9698 0.0782-0.2310
vn -0.7450 0.0894-0.6611
……
vt -1.4181 0.1396-0.0000
vt -1.3700 0.0000-0.0000
……
s 1
f1/1/1 2/2/2 3/3/1
f4/4/3 5/5/4 6/6/3
其中,第2行mtllib表示使用與OBJ文件配套的材質(zhì)庫,v表示幾何頂點 (Geometic Vertices),vn表示頂點法線(Vertex Normals)。
MTL材質(zhì)庫文件包含材質(zhì)漫反射、環(huán)境、光澤的RGB定義值,以及折射、透明度等其它特征。MTL文件也是一種文本文件,每一行數(shù)據(jù)由關(guān)鍵字開始。
3D刀具模型材質(zhì)庫文件內(nèi)容如下:
#創(chuàng)建時間:11.102017 14:50:59
newmtl wire_008110135
Ns 32
d 1
Tr 0
Tf 1 1 1
illum 2
Ka 0.0314 0.4314 0.5294
Kd 0.0314 0.4314 0.5294
Ka 0.3500 0.3500 0.3500
關(guān)鍵字newmtl表示定義新的材質(zhì)組,Ns表示材質(zhì)光亮度,illum表示材質(zhì)照明度,Kd表示材質(zhì)散射參數(shù)。
OpenGL(Open Graphics Library)本身是高效、簡潔的開放圖形庫接口,它定義了一個跨編程語言、跨平臺的編程接口規(guī)范,主要用于3D模型編程,但在智能手機等手持移動終端上運行OpenGL有些不適合,所以Android系統(tǒng)內(nèi)置的是OpenGL ES[6]。Android提供了GLSurfaceView組件支持OpenGL ES,這個組件本身并不提供3D模型繪制功能,而是GLSurfaceView.Renderer實例化來完成GLSurfaceView中3D模型的繪制工作[7]。
jPCT-AE是基于OpenGL ES技術(shù)開發(fā)的3D圖形引擎,以Java語言為基礎(chǔ)。jPCT-AE擁有以下幾個重要特征[8]:①支持加載3DS、OBJ、MD2、ASC等序列化的3D模型文件格式;②可支持3D模型文件渲染到紋理;③支持Android1.5及更高版本上的OpenGL ES1.x和OpenGL ES 2.0;④支持內(nèi)存壓縮,可減輕3D模型渲染對內(nèi)存空間造成的壓力。因此,本文選擇OpenGL ES和jPCT-AE技術(shù)作為移動端3D模型可視化應(yīng)用研發(fā)的技術(shù)支持。
構(gòu)建一個3D模型需要完成3個步驟:
(1)jPCT-AE引擎提供的圖形構(gòu)建方法定義為Loader.loadOBJ,加載OBJ格式的3D模型文件和MTL文件到一個Object3D對象數(shù)組中。
(2)借助Object3D.mergeAll方法合并Object3D對象數(shù)組中的所有對象,構(gòu)成一個完整的OBJ格式3D模型對象。
(3)調(diào)用函數(shù)方法Object3D.build完成OBJ格式的3D模型構(gòu)建工作。
紋理貼圖可讓3D模型更加逼真。在OpenGL ES中,onSurfaceCreated方法用于啟用紋理貼圖,它屬于Renderer類,本文結(jié)合使用jPCT-AE技術(shù)中的TextureManager實現(xiàn)。
應(yīng)用于紋理貼圖的圖片格式可以是BMP、PNG以及JPG。使用Bitmap decodeFile方法加載圖片,并可使用gl.glGenTextures方法生成對應(yīng)的紋理貼圖。此外,也可使用jPCT-AE技術(shù)中Texture類的對象生成對應(yīng)的紋理貼圖。
通過調(diào)用OpenGL ES提供的啟用貼圖坐標(biāo)數(shù)組數(shù)據(jù)、設(shè)置貼圖的坐標(biāo)數(shù)據(jù)以及執(zhí)行紋理貼圖3個方法完成3D模型的紋理貼圖工作。
本文研發(fā)的OBJ格式的3D模型可視化模塊包括3D模型放大、縮小、旋轉(zhuǎn)等操作,采用Android Touch事件驅(qū)動方式實現(xiàn)。
基于OBJ格式的3D模型可視化流程如圖2所示。
(1)放大縮小。在Android應(yīng)用開發(fā)中可結(jié)合使用多點觸摸操作技術(shù)和OpenGL ES 3D圖形構(gòu)建方法實現(xiàn)3D模型放大、縮小操作。手指多點觸摸需處理ACTION_POINTER_DOWN與ACTION_POINTER_UP兩種活動行為,并根據(jù)計算兩根手指移動的距離等數(shù)據(jù)實時觸發(fā)3D模型渲染工作。
(2)旋轉(zhuǎn)。同放大、縮小使用的原理不同,這里需要處理單點觸摸操作,處理過程為當(dāng)按下手指時獲取手指的觸摸坐標(biāo)點,在手指移動過程中使用單點操作的MotionEvent.ACTION_MOVE活動行為,處理手指移動的距離和方向等信息,并根據(jù)計算獲得的數(shù)據(jù)實時觸發(fā)3D模型渲染工作。
圖2 OBJ格式的3D模型可視化流程
可視化旋轉(zhuǎn)操作。圖3展示了3D刀具模型旋轉(zhuǎn)前的效果,圖4展示了3D刀具模型旋轉(zhuǎn)后的效果,旋轉(zhuǎn)操作包括左右旋轉(zhuǎn)、上下旋轉(zhuǎn)。
圖3 旋轉(zhuǎn)前
圖4 旋轉(zhuǎn)后
可視化放大、縮小操作。圖5展示了圖3的3D刀具模型縮小操作效果,圖6展示了放大之后的模型效果。
圖5 縮小
圖6 放大
本文設(shè)計研發(fā)的應(yīng)用軟件可與研究背景中提到的云平臺系統(tǒng)集成使用,如圖1所示,把移動端后臺服務(wù)器、數(shù)據(jù)庫服務(wù)器放置在云端。云平臺服務(wù)器提供用戶數(shù)據(jù)的存儲、讀寫等功能,用戶可通過移動終端設(shè)備與后臺云服務(wù)器進行通信。
本文研發(fā)的應(yīng)用軟件結(jié)合使用云平臺技術(shù),主要提供用戶下載服務(wù)器上的3D模型文件功能,具體操作流程如圖7所示。
圖7 3D模型文件下載
用戶登錄后,通過HTTP網(wǎng)絡(luò)協(xié)議向服務(wù)器發(fā)送數(shù)據(jù)下載請求,下載服務(wù)器上的3D模型文件。3D模型文件大小從幾百KB到幾MB不等,為提升軟件性能,該模塊把3D模型文件下載到移動設(shè)備的本地存儲系統(tǒng)中,作為緩存文件使用。3D模型文件下載完畢后,調(diào)用本地OBJ格式3D模型可視化功能,進行3D模型文件可視化展示與操作。
本文作為“面向互聯(lián)網(wǎng)+的產(chǎn)品數(shù)字化設(shè)計與制造服務(wù)平臺”的子模塊之一,完成了3D數(shù)字化產(chǎn)品移動端可視化研發(fā)工作。本文解析了OBJ格式構(gòu)成及3D模型數(shù)據(jù)格式。基于目前流行的智能手機操作系統(tǒng)——Android OS,結(jié)合面向移動平臺開發(fā)的OpenGL ES和jPCT-AE技術(shù),完成了3D數(shù)字化產(chǎn)品在移動端的展示、縮放、旋轉(zhuǎn)功能。模塊還可集成到云平臺系統(tǒng)上,為“互聯(lián)網(wǎng)+制造業(yè)”領(lǐng)域的產(chǎn)品設(shè)計提供方便快捷的數(shù)字化產(chǎn)品服務(wù)方案。