程序設(shè)計(jì)階段1)建立project.在VisualC編譯環(huán)境中,利用AppWizard建立一個(gè)基于MFC的單文檔應(yīng)用程序。2)加入opengl32lib、glaux.lib、glu32.lib庫。3)修改View類的頭文件。在View類的頭文件中加入以下幾行:includeglgl.hincludeglglu.hincludeglglaux.h4)先將lathe.cpp和lathe.h復(fù)制到project目錄下,然后分別將得到的axial.cpp和axial.h分別添加到SourceFiles和HeaderFiles中<4>。
在Doc.cpp和View.cpp文件中添加includelathe.h.在View.cpp文件中添加像素格式設(shè)定函數(shù)、建立函數(shù)模型函數(shù)、設(shè)置光源函數(shù)、選擇材質(zhì)函數(shù)、渲染函數(shù)等,這些函數(shù)對(duì)于每一導(dǎo)入OpenGL中的相同格式的文件基本相同。
通過VC添加函數(shù)向?qū)硖砑邮髽?biāo)消息函數(shù),實(shí)現(xiàn)交互動(dòng)畫的控制。在View.h文件中加上需要的各種變量后,進(jìn)行調(diào)試。在調(diào)試過程中會(huì)遇到下面的錯(cuò)誤:unexpectedendoffilewhilelookingforprecompiledheaderdirectiveErrorexecutingcl.exe.當(dāng)雙擊錯(cuò)誤的時(shí)候就會(huì)指向axial.cpp文件的尾部。添加:includestdafx.h.重新編譯的時(shí)候錯(cuò)誤就會(huì)消失。
編譯通過后,屏幕上沒有任何顯示。通過改變glSaclef和glTranslatef兩個(gè)函數(shù)的參數(shù)和順序,在裁剪區(qū)域內(nèi)顯示出導(dǎo)入的圖形。OpenGL的深度坐標(biāo)是指向顯示器的內(nèi)部為正方向,其他兩個(gè)方向向上和向右為正方向。認(rèn)識(shí)了這一點(diǎn)會(huì)很容易找到導(dǎo)入的物體。在軟件制作的建模階段,將3DSMAX系統(tǒng)軸線坐標(biāo)原點(diǎn)與物體的中心重合。
當(dāng)顯示模型后,也會(huì)遇到一個(gè)常見的問題,即3DSMAX中設(shè)置的顏色調(diào)試后沒有顯示出正確的色彩。直接在axial.cpp找到在3DSMAX中渲染時(shí),在材質(zhì)編輯對(duì)話框中賦予的材料的名字。材料由一個(gè)一維數(shù)組表示,數(shù)組有四個(gè)成員,每個(gè)成員有六項(xiàng)參數(shù)。
在axial.h中定義它的數(shù)據(jù)結(jié)構(gòu)為:typedefstruct{floatambient;floatdiffuse;floatspecular;floatemission;floatalpha;inttexture;}MaterialDef;對(duì)上面的參數(shù)進(jìn)行修改,就可以得到較理想的渲染效果。
注意的關(guān)鍵點(diǎn)坐標(biāo)統(tǒng)一建立模型的時(shí)候所使用的軟件坐標(biāo)與OpenGL坐標(biāo)統(tǒng)一,顯示的時(shí)候就不會(huì)出現(xiàn)找不到顯示物體的現(xiàn)象。單位統(tǒng)一在建立模型的時(shí)候所使用軟件的單位與OpenGL單位統(tǒng)一,在窗口就可以得到適當(dāng)大小的模型。函數(shù)順序glTranslatef和glRotatef兩個(gè)函數(shù)在程序中的先后順序會(huì)影響對(duì)鼠標(biāo)的控制。在鼠標(biāo)控制物體旋轉(zhuǎn)的時(shí)候,有時(shí)候會(huì)出現(xiàn)物體突然消失的現(xiàn)象,即因?yàn)闆]有在程序設(shè)計(jì)時(shí)注意平移變化和旋轉(zhuǎn)變化的順序。
對(duì)glTranslatef和glRotatef兩個(gè)函數(shù)進(jìn)行修改,可以達(dá)到旋轉(zhuǎn)中心和物體的中心重合的目的。在教學(xué)的演示過程中,將復(fù)雜模型的各個(gè)復(fù)雜面展現(xiàn)在屏幕上,提高了教學(xué)軟件對(duì)指定部位的顯示能力。
參數(shù)設(shè)置對(duì)話框?qū)崿F(xiàn)1)在VC的基類CDialog下繼承的一個(gè)對(duì)話框類,用來做輸入?yún)?shù)的控制面板。2)在菜單中添加一個(gè)消息傳遞函數(shù),此消息傳遞函數(shù)要在View類中。3)為對(duì)話框和菜單設(shè)置正確的ID,同時(shí)在資源文件的頭文件中定義此ID.在消息傳遞時(shí)連接菜單的ID.
結(jié)語3DSMAX模型轉(zhuǎn)化到OpenGL中有很多方法,中間的轉(zhuǎn)換軟件也有很多,如常用的3DWin和3DExploration是目前用得*多的兩個(gè)軟件??梢詫?DSMAX輸出的。ase格式、max格式還有其他軟件如CAD輸出的dwg格式、dxf格式等十多種格式轉(zhuǎn)為OpenGL格式。現(xiàn)在部分企業(yè)和學(xué)校也利用VEGACREATOR結(jié)合用于開發(fā)交互式視景仿真系統(tǒng)。利用3D軟件很方便建立需要的模型,解決了在程序中建立模型的復(fù)雜過程。因此,也可以用3DSMAX建立比較自由的立體,如人物、動(dòng)物等,再轉(zhuǎn)化到OpenGL中制作交互動(dòng)畫,從而設(shè)計(jì)出生動(dòng)的交互動(dòng)畫和更完善的輔助虛擬制造。本文通過OpneGL強(qiáng)大的三維顯示效果,實(shí)現(xiàn)了對(duì)機(jī)床的三維建模和對(duì)輸出虛擬產(chǎn)品的三維模型渲染。
目前,只是實(shí)現(xiàn)了G代碼到虛擬產(chǎn)品,今后的研究方向?qū)⒅鸩綄?shí)現(xiàn)從計(jì)算機(jī)和機(jī)床的通訊接口設(shè)計(jì),完成從虛擬代碼到真實(shí)產(chǎn)品的過程,并加入虛擬制造中機(jī)床的精度和刀具磨損對(duì)產(chǎn)品精度的影響。