

【摘 要】文中針對目前主要由于汽車結(jié)構(gòu)復(fù)雜,平面圖形難以顯示、學(xué)生學(xué)習(xí)比較困難等問題,提出了汽車三維仿真模型交互顯示及模擬拆裝系統(tǒng)以提高學(xué)生的學(xué)習(xí)效果,并對系統(tǒng)結(jié)構(gòu)、關(guān)鍵技術(shù)、系統(tǒng)集成等核心問題進(jìn)行了研究。
【關(guān)鍵詞】汽車三維仿真模型 交互式 顯示 Cult3D OpenGL
【中圖分類號】TP391 【文獻(xiàn)標(biāo)識碼】A 【文章編號】1674-4810(2013)35-0050-02
一 開發(fā)汽車結(jié)構(gòu)與操作綜合演示系統(tǒng)的意義
通過汽車結(jié)構(gòu)的教學(xué)和各個結(jié)構(gòu)模型的開發(fā)和演示,可清楚地了解汽車內(nèi)在部位的結(jié)構(gòu)和作用,使學(xué)生更快地掌握各種軍用汽車的專業(yè)知識。通過三維結(jié)構(gòu)模型的交互演示、動畫演示和模擬拆裝等多種形式對軍用汽車各結(jié)構(gòu)進(jìn)行模擬顯示、拆解、裝配、調(diào)整和故障診斷,從而可以使受訓(xùn)人員快速掌握各種軍用汽車的基本結(jié)構(gòu)、各結(jié)構(gòu)的調(diào)整和維護(hù)保養(yǎng)方法,以及各結(jié)構(gòu)在調(diào)整保養(yǎng)中應(yīng)注意的實(shí)際問題,從而提高受訓(xùn)人員的基本操作能力,最終提高我軍汽車運(yùn)輸車隊(duì)的運(yùn)輸效能。
二 汽車三維仿真模型交互顯示及模擬拆裝系統(tǒng)的設(shè)計(jì)方法
采用軟件編程和動畫制作、圖像處理等相結(jié)合的方法進(jìn)行系統(tǒng)開發(fā)。本系統(tǒng)在系統(tǒng)開發(fā)過程中主要使用的應(yīng)用軟件有:VC++編程軟件、director多媒體制作軟件、圖形處理與制作軟件PhotoShop、三維模型制作軟件3DSMAX等。每個汽車系列主要內(nèi)容包括:汽車基本結(jié)構(gòu)三維模型交互顯示、基本總成拆裝仿真、基本原理演示講解、常見故障原因分析及故障診斷、基本參數(shù)查詢等五個模塊。在每一個模塊中均采用模型設(shè)計(jì)、圖片顯示、動畫演示等形式進(jìn)行綜合演示。比如,對于汽車的某個基本結(jié)構(gòu),可進(jìn)行基本結(jié)構(gòu)立體模型的建立,然后采用圖片的整體演示和局部演示,模型基本結(jié)構(gòu)組成演示,模型基本結(jié)構(gòu)組成演示又可通過動畫形式進(jìn)行分解、拆裝等演示(可分步進(jìn)行演示),達(dá)到圖文并茂、條理清晰,從而使受訓(xùn)人員一目了然,更易接受。
在進(jìn)行汽車三維仿真模型交互顯示及模擬拆裝系統(tǒng)的設(shè)計(jì)時,其設(shè)計(jì)思路為:(1)首先用Pro/E建立汽車各種結(jié)構(gòu)的三維模型,并導(dǎo)出為STL格式的模型;(2)把STL格式的模型導(dǎo)入到3DSMAX進(jìn)行貼圖、渲染和動畫制作,并導(dǎo)出為C3D格式的三維模型;(3)把C3D格式的三維模型導(dǎo)入到Cult3D進(jìn)行交互處理;(4)在VC++中實(shí)現(xiàn)對3DSMAX構(gòu)造OpenGL模型的控制;(5)用VC++、OpenGL等軟件開發(fā)出三維模型文件嵌入控件,用于三維模型在多媒體顯示軟件的嵌入式和交互式顯示。
三 汽車三維仿真模型交互顯示及模擬拆裝系統(tǒng)的關(guān)鍵技術(shù)研究
1.三維模型的交互式處理
所有的建模都有不同的應(yīng)用領(lǐng)域軟件,而虛擬模型要解決兩個關(guān)鍵問題,即模型轉(zhuǎn)換和幾何模型的建立。在汽車零部件三維模型的建立方面,專業(yè)三維造型軟件3DSMAX或Pro/E以它強(qiáng)大的建模和材質(zhì)貼圖渲染功能占據(jù)著得天獨(dú)厚的優(yōu)勢。在汽車結(jié)構(gòu)建模設(shè)計(jì)中,首先用Pro/E建立汽車各種結(jié)構(gòu)的三維模型,并導(dǎo)出為STL格式的模型并保存;然后將STL格式的三維模型導(dǎo)入到3DSMAX進(jìn)行貼圖、渲染和動畫制作,并導(dǎo)出為C3D格式的三維模型;然后將渲染好的C3D格式的三維模型導(dǎo)入到Cult3D中。導(dǎo)入之前,需要安裝插件Cuh3D Exporter for 3DSMAX,此輸出插件支持從主流動畫制作媒體中將模型文件導(dǎo)出為Cult3D中間文件格式。這樣,3DMAX就能將3D模型輸出成Cult3D Design的C3D格式。將三維軟件中輸出的C3D格式文件置入到專業(yè)的3DVR軟件中進(jìn)行場景設(shè)置、交互編輯以及在需要說明的地方加入文字介紹等,這樣就可輸出具有交互功能的三維模型了。
在交互性能的實(shí)現(xiàn)上,Cult3D采用基于Java的內(nèi)核,不但可以直接在Cult3D Designer中完成基本的交互動態(tài)展示,還可以通過Cult3D API開發(fā)程序,利用JavaScript進(jìn)行編譯,并將它應(yīng)用于Cuh3D對象,使用戶可以利用熟悉的多媒體用戶界面,例如按鈕和下拉列表框控制Cult3D對象的外觀和行為。使用戶通過鼠標(biāo)拖拽對象,從不同角度真實(shí)地了解到汽車三維模型的外形、結(jié)構(gòu)和功能,甚至更換汽車三維模型的顏色、紋理,甚至將其組合或拆分,大大豐富了三維瀏覽時的交互效果。具體流程見圖1。
2.在VC++中實(shí)現(xiàn)對3DSMAX構(gòu)造OpenGL模型的控制
3D設(shè)計(jì)的最復(fù)雜而最費(fèi)時的工作是構(gòu)造3D模型。OpenGL沒有提供高級命令函數(shù)來定義復(fù)雜的三維形體,只提供了基本的點(diǎn)、線和多邊形方式構(gòu)造3D模型。如何利用一些優(yōu)秀的商用建模軟件。例如,3DSMAX、AutoCAD等來構(gòu)造3D模型,在OpenGL中加以采用并進(jìn)行實(shí)時控制一直是困擾程序員的難題。下面就相關(guān)問題的解決方法加以說明。
第一,用3DSMAX修改、渲染模型并轉(zhuǎn)換文件。在3DSMAX中修改、渲染模型以后,保存文件名后綴為.max的文件,然后用3D Exploration進(jìn)行轉(zhuǎn)換,可以選擇Simple App、Data Only和Display List 三個選項(xiàng)之一:Simple App生成一個OpenGL的簡單應(yīng)用;Data Only只生成OpenGL像素?cái)?shù)據(jù);Display List生成OpenGL的顯示列表;選擇一個選項(xiàng)即可。為了不同的應(yīng)用,可以生成包括一個實(shí)體的法向量、材質(zhì)、紋理等多種應(yīng)用,將文件名后綴為.max的文件保存為cpp OpenGL Code形式,即可以在VC++引入這一文件。
第二,在VC++中控制三維模型。下面簡單介紹VC++的MFC編程中運(yùn)用OpenGL三維圖形庫編寫實(shí)時動畫應(yīng)注意的幾個問題:(1)在主視的文件中應(yīng)包含OpenGL的頭文件,即GL/gl.h,GL/glu.h和GL/glaux.h;(2)使用Windows的設(shè)備上下文句柄,也需要申請OpenGL的著色設(shè)備上下文句柄,同時保證正確釋放著色設(shè)備上下文句柄;(3)OpenGL函數(shù)只存在指定窗口類型為cs.style=WS_CLIPSIBLINGS |WS_CLIPCHILDREN時才有效;(4)注冊并實(shí)現(xiàn)OpenGL的設(shè)備上下文句柄,并保證與Windows的窗口句柄的正確連接;(5)在用OpenGL繪圖時,必須指定像素格式;(6)由于要保證窗口尺寸變化時圖形應(yīng)做到不變形。因此,應(yīng)實(shí)現(xiàn)新的窗口縱橫比和視口尺寸。這里只是對編程中的幾個要點(diǎn)作說明,讀者可以根據(jù)自己的具體需要實(shí)現(xiàn)繪圖。
為了優(yōu)化系統(tǒng)性能,一般應(yīng)采用調(diào)用顯示清單的方法調(diào)用這些數(shù)據(jù)。一個顯示清單就是一組先被存儲再被運(yùn)行的OpenGL命令,當(dāng)一個顯示清單被觸發(fā)時,它內(nèi)部的命令以它們被發(fā)布的順序被執(zhí)行,這有別于OpenGL的立即模式。即立即執(zhí)行命令的方式。OpenGL的顯示清單實(shí)際上就是命令的一個高速緩沖存儲器,而不是一個動態(tài)數(shù)據(jù)庫,即一個顯示清單一旦被創(chuàng)建了,它就不能被修改。無論是在運(yùn)行OpenGL程序的本地機(jī)上,還是在運(yùn)行OpenGL程序的服務(wù)器上,合理地使用顯示清單都可以改善系統(tǒng)性能。
運(yùn)用OpenGL的顯示清單主要包括以下幾個步驟:(1)創(chuàng)建顯示清單用glNewList( )和glEndList( )語句對,在兩句中間包含顯示清單的內(nèi)容;(2)控制顯示清單和它們的索引,當(dāng)然可以用任意一個正整數(shù)作為顯示清單的索引,但這易引起混淆,因此用glGenLists( )函數(shù)自動產(chǎn)生一個未創(chuàng)建的索引;(3)調(diào)用顯示清單用glcallList( )即可;(4)有時有多個顯示清單索引,如果要使顯示清單索引可以再被使用,應(yīng)用glDeleteLists( )函數(shù)刪除顯示清單。
3.用VC++及OpenGL開發(fā)出三維模型文件嵌入控件
在VC++下用ATL做一個OpenGL的三維模型文件嵌入(CO)控件,其步驟如下:
第一,新建一個ATL空項(xiàng)目(項(xiàng)目名OpenGL_ATL)。
第二,添加一個ATL對象(MyControl)(VC6下為Full Control,VC7下為ATL控件)。
第三,在對象的.H頭文件中添加: #include
第四,在接口實(shí)現(xiàn)類添加一個OpenGL的RC(rendering context)成員變量:HGLRC m_hRC。
第五,添加一個設(shè)置OpenGL像素格式(接口實(shí)現(xiàn)類的)成員函數(shù)。
第六,添加一個Windows消息WM_CREATE:
LRESULT CMyControl::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL /*bHandled*/);{
HDC hdc = GetDC( ); RECT rc;GetClientRect(rc);
CreateContext(hdc, rc);//初始化
return 0;}
第七,添加一個Windows消息WM_DESTROY LRE SULT CMyControl::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL /*bHandled*/)
{ wglMakeCurrent(NULL, NULL);
if (m_hRC) { wglDeleteContext(m_hRC);m_hRC = NULL;} return 0;}
第八,添加一個事件OnRender,點(diǎn)擊ClassView中的IMyControlEvents添加方法OnRender參數(shù)int right,int left,int bottom,int top,然后編譯idl文件,點(diǎn)擊CMyControl實(shí)現(xiàn)連接點(diǎn)選中IMyControlEvents。
第九,在OnDraw添加代碼:
HRESULT OnDraw(ATL_DRAWINFO di)
{ HDC hdc = di.hdcDraw; RECT rc = *(RECT*) di.prcBounds; wglMakeCurrent(hdc, m_hRC); glClearColor (1.0f, 0.0f, 0.0f, 10.0f); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//激發(fā)OnRender事件
FireOnRender(rc.right , rc.left, rc.bottom , rc.top);
OnRender(rc.right,rc.left,rc.bottom,rc.top) ; glFinish( ); SwapBuffers(wglGetCurrentDC( )); return S_OK;}
第十,編譯。要使用本控件,首先注冊,然后拖到要顯示的窗體上,并在OnRender事件中寫入要顯示的物體。
四 應(yīng)用舉例
拆卸步驟:(1)拆下變速器上蓋總成;(2)拆下一軸總成;(3)用拉器拉出二軸后軸承;(4)取出二軸總成。
裝復(fù):與分解順序相反,點(diǎn)擊零部件進(jìn)行裝復(fù)。
圖2 三維模型的交互式拆裝訓(xùn)練界面
圖2應(yīng)用本文闡述的方法開發(fā)的汽車三維仿真模型交互顯示及模擬拆裝系統(tǒng)界面,該系統(tǒng)通過網(wǎng)絡(luò)環(huán)境下的ASP動態(tài)網(wǎng)頁技術(shù)與Cult3D網(wǎng)絡(luò)三維瀏覽技術(shù)以及網(wǎng)絡(luò)數(shù)據(jù)庫技術(shù)實(shí)現(xiàn)了汽車結(jié)構(gòu)三維模型在線展示,也可以在Director、PowerPoint、VC++等軟件中進(jìn)行汽車結(jié)構(gòu)三維模型動態(tài)交互展示,即可以對三維模型進(jìn)行旋轉(zhuǎn)、縮小、拆分和裝復(fù)等。
五 結(jié)束語
本文討論了基于多媒體的汽車三維仿真模型交互顯示及模擬拆裝系統(tǒng)開發(fā)過程中的若干關(guān)鍵技術(shù)和系統(tǒng)的主要構(gòu)架,提出了三維可視化和交互式瀏覽的顯示設(shè)計(jì)方法,即使用Pro/E、3DSMAX和Cult3D建立產(chǎn)品模型,通過Cult3D Java API和VC++實(shí)現(xiàn)場景交互,從而實(shí)現(xiàn)對三維模型進(jìn)行旋轉(zhuǎn)、縮小、拆分和裝復(fù)等。
參考文獻(xiàn)
[1]阿新工作室.任我虛擬Cult3D/3ds max 4.2/Maya 4三維產(chǎn)品設(shè)計(jì)與互動教程[M].北京:北京希望電子出版社,2002
[2]侯俊杰.深入淺出MFC[M].武漢:華中科技大學(xué)出版社,2001
[3]《電腦編程技巧與維護(hù)》雜志社.Visual C/C++系統(tǒng)開發(fā)典型實(shí)例解析[M].北京:中國水利水電出版社,2007
〔責(zé)任編輯:龐遠(yuǎn)燕〕