摘 要:三維幾何建模是構建數控加工虛擬仿真環境的基本任務之一。研究直接基于OpenGL實用工具包(OpenGL Utility Toolkit進行數控加工虛擬仿真幾何建模問題。在分析常用幾何建模方法不足的基礎上,指出直接利用OpenGL及其實用工具包GLUT建立三維模型的優點。簡要介紹GLUT的功能,分析基于OpenGL的幾何建模方法中的坐標系、矩陣變換順序、裝配層次、以及縮放比例等重要問題。在此基礎上構建了虛擬車床的三維幾何模型。這有助于提高數控加工虛擬仿真環境的真實感,為虛擬機床運動仿真提供了堅實基礎。
關鍵詞:虛擬車床;OpenGL實用工具包;幾何建模;矩陣變換
Virtual Lathe Geometry Modeling Based on OpenGL
WANG Yongchao
(Guangdong Technical Normal University,Guangzhou,510635,China
Abstract:3D geometry modeling is one of basic tasks for building CNC virtual simulation environment.Directly based on OpenGL Utility Toolkit,this paper studies how to build geometry model for NC processing virtual simulation.The disadvantages of general geometry modeling approach are analyzed and advantages of 3D geometry modeling approach based on OpenGL and OpenGL Utilities Toolkit (GLUT are discussed.The functions of GLUT are presented briefly.ey problems in OpenGL/GLUT-based geometry modeling are discussed,including coordinate system,the sequence of matrix transformation,assembly level and scale factor.Then a 3D geometry model for virtual lathe is modeled and assembled.This virtual lathe can be used to improve visibility of CNC virtual simulation environment and can be used as a step stone for kinematical simulation of virtual lathe.eywords:virtual lathe;OpenGL utility toolkit;geometry modeling;matrix transformation
1 引 言
數控加工虛擬仿真是綜合利用計算機圖形學和系統仿真學等技術模擬數控加工過程的交叉性學科,它是虛擬制造技術的重要組成部分。通過虛擬仿真,可以高效便捷地檢查刀具路徑、檢驗加工方法和NC程序的正確性,從而保證加工質量提高加工效率。
在數控加工虛擬仿真中,建立數控機床的三維幾何模型是一項基本任務。如何結合虛擬仿真環境的特殊要求,提高幾何模型的質量,一直是數控加工虛擬仿真以至整個虛擬制造技術研究的重點之一。本文論述基于OpenGL建立數控機床三維幾何模型的優點,特別是利用OpenGL實用工具包提高三維幾何模型建模的優點,簡要說明GLUT的功能安裝等,詳細分析基于OpenGL幾何建模中的一些重要問題,在此基礎上建立虛擬車床的幾何模型。
2 幾何建模特點及方法
數控加工虛擬仿真是在虛擬環境中研究數控加工過程的現象和問題,因此以三維形式表達幾何模型是虛擬仿真可視化的基本要求。更重要的是,實時性和真實感這一虛擬仿真研究中的主要矛盾,在數控加工仿真研究中顯得更為突出。
在實時性方面,當前虛擬仿真建模對象已經從刀具、工件擴展到床身、夾具、控制面板等整個機床。零部件數量和復雜度的增加,對仿真運行的實時性提出更高要求。在真實感方面,對于幾何模型的表達,不僅要求形狀準確,而且要求利用光照材質等技術增強虛擬環境的真實感。
虛擬仿真幾何建模常用的方法是,在成熟的CAD平臺建立幾何模型,然后利用數據交換程序讀入到數控仿真系統中。這種方法因為CAD建模平臺功能強大而效率很高,但是在實時性和真實感方面卻有不足之處。如果在轉換后仍然要求幾何模型保持原來模型足夠的信息,那么轉換后的模型文件通常比原來的模型文件要大,這不利于虛擬仿真運行的實時性;模型轉換的結果有可能不利于模型的真實性表達。例如1個矩形面在轉換后可能用2個共斜邊的直角三角形表達,這樣在光照計算時該面有突變。采用直接構建三維幾何模型的方法可以避開這些不足。不但如此,對于數控加工虛擬仿真,采用直接幾何建模方法有2個優點。虛擬仿真研究重心是對于加工過程,常常對工件、刀具等進行仔細的幾何建模,而對其他零部件如床身、主軸箱等進行適當簡化,用長方體、圓柱、圓錐等來表達之;除了刀具、工件等零件外,絕大多數零部件的幾何模型建立后幾乎不再改變,因此直接建模方法也具有“一次建模,多次使用”的優點。
OpenGL強大的圖形能力為直接建模方法提供了有力的支持,通過對基本三維幾何模型進行變換、裝配等,可以較為方便地建立機床的幾何模型,尤其是GLUT實用工具包提供了一些基本的三維幾何模型,顯著提高了幾何模型工作的效率。
本文以車床為例,說明直接利用OpenGL/GLUT建立三維模型的主要技術。簡要說明了GLUT的功能和安裝。根據虛擬仿真的要求,可將數控車床分為床身、主軸箱、主軸卡盤、尾座、刀架、刀具和工件7部分。其中除床身和主軸箱外,其他5個構件均為運動件。在此基礎上利用矩陣變換特別是縮放變換,構建了虛擬車床的幾何模型。
3 GLUT主要功能和安裝
GLUT是基于OpenGL的一個實用工具包,它提供許多實用的功能,如多視窗的繪制、回調函數驅動的事件管理、支持多種輸入設備(鍵盤、鼠標、空間球等)、空閑事件與定時器、下拉式菜單管理、三維幾何模型繪制、位圖與字體等。
3.1 GLUT的基本功能
包括窗口初始化功能、事件處理、窗口和菜單管理、回調函數注冊和幾何建模功能。
窗口初始化功能,它有4個函數。主要用于處理初始化并以及命令行參數,初始化顯示模式,指定窗口左上角在屏幕上的位置和窗口大小,以像素為單位。
事件處理只有一個函數,它用于顯示創建的窗口、處理輸入的事件、觸發回調函數、進入循環直到程序退出。
窗口管理包含18個函數,用于建立、銷毀窗口及可能的子窗口,管理和設置窗口的屬性。
在GLUT中有20個回調函數,用于響應用戶事件。最重要的回調函數是glutDisplayFunc,當GLUT認為需要重新顯示窗口內容時,都將執行這一函數注冊的回調函數。另外一些重要的回調函數注冊函數有:函數glutReshapeFunc用于注冊窗口大小改變這一事件發生時GLUT將調用的函數。gluteyboardFunc和glutMouseFunc用于注冊鍵盤和鼠標事件發生時的回調函數。函數glutMotionFunc注冊鼠標移動事件的回調函數。這3個函數用于人機交互處理。在沒有其他事件處理時,GLUT將調用函數glutIdleFunc注冊的函數,而函數glutTimerFunc則注冊處理定時器事件的函數。
OpenGL繪圖函數只能生成點、直線、多邊形等簡單的幾何圖元,GLUT提供了18個創建三維物體的函數。利用它們可以創建9種三維物體,如圓錐體、立方體、球體等,每一物體有線框和實體2種方式。
3.2 GLUT的安裝
在Windows XP/Visual C++ 6.0下進行GLUT編程時,首先要進行OpenGL的基本設置,然后再進行GLUT設置。
進行OpenGL基本設置時,必須加入3個OpenGL庫,分別是opengl32.lib,glu32.lib和glaux.lib。具體的方法是在Visual C++ 6.0環境中,依次選擇“項目”、“設置”、“鏈接”、“對象|庫模塊”,然后添加“opengl32.lib glu32.lib glaux.lib”,必須注意3個文件之間的分隔符不是逗號而是空格。
在程序開發時,必須包含2個OpenGL頭文件,即gl.h和glu.h。在Visual C++6.0中,還需要在這2個文件之前包含頭文件windows.h,這是因為在gl.h和glu.h中使用一些在Windows.h中定義的宏。
GLUT的安裝包括3項內容。
(1) 將glut32.dll文件復制到操作系統的System32或System目錄下;
(2) 將glut.h文件復制到Visual C++安裝目錄下的IncludeGL文件夾下;
(3) 將glut32.lib文件復制到到Visual C++安裝目錄下的Lib文件夾下。
上述設置結束后,在編程應用中,將頭文件glut.h包含在gl.h和glu.h之后即完成GLUT的安裝設置。
4 坐標系匹配
為在車床中正確安裝各構件,必須結合數控車床車削加工特點和OpenGL的幾何建模功能,確定不同坐標系之間的關系。在OpenGL中全局坐標系用以確定幾何模型的絕對位置,也用以確定視點位置,它是一個右手坐標系,如圖1(a)所示,向右為,x軸正向,向上為y軸正向,z軸正向垂直朝外。在數控車床中,機床原點位于主軸前端面的中心,坐標系z軸正向從主軸卡盤中心指向尾座中心,x,向為徑向進刀方向,它也是一個右手系,如圖1(b所示。可見比較恰當的是將OpenGL全局坐標系與車床坐標系對應,為此有2種辦法可以實現。
第一種方法是視點不動模型變換。在圖1(a所示的視點不變情況下,將OpenGL全局坐標系繞y軸逆時針旋轉90°,接著繞z軸逆時針旋轉180°即可獲得圖1(b所示姿態。第2種方法是模型不動視點變動。對于圖1(a通過視點變換將視點設置于第8象限,并恰當地設置視點方向和向上方向也可獲得圖1(b所示位置。即利用實用庫函數gluLookAt實現,視點坐標(x,y,z位于第8象限(x>0,y<0,z>0),視線方向為從視點到坐標原點,而向上方向取為y軸負方向。
OpenGL的局部坐標系也是右手坐標系,它固定在幾何模型上,位于幾何模型中心,隨幾何模模型的移動而移動。而工件坐標系是固定在工件上的,因此可將工件坐標系與OpenGL局部坐標系重合;實際上,包含工件在內,OpenGL局部坐標系將應用于數控車床所有構件的幾何模型,它如圖1(c所示。
5 模型變換和裝配
在OpenGL的實用庫GLU以及工具箱GLUT中提供了多種基本的三維幾何模型,如利用實用庫函數gluCylinder建立圓柱,利用GLUT函數可以建立包括立方體、球體等九種三維模型。通過設置這些函數的不同參數,以及利用縮放變換,可以實現不同零件的三維模型。
5.1 幾何模型變換的先后順序
零件裝配即零件空間相互位置設置,利用平移變換和旋轉變換完成,實質上是矩陣乘法運算。分別從全局坐標系和局部坐標系的角度均可完成位置設置。
例如對于三爪卡盤幾何模型,右上爪模型幾何中心初始位置為坐標原點,而將其安裝于半徑為R的圓周上,并且位置與x軸夾角。
在全局坐標系下考慮位置設置時,爪模型的所有變換相對于全局坐標系各坐標軸。當在全局坐標系下考慮位置設置時,不論是“先平移后旋轉”,還是“先旋轉后平移”,均容易確定三個爪模型的空間絕對位置,但是希望的變換順序在程序代碼中以相反的順序指定。另外必須注意的是,除函數調用順序外,2種方法平移函數的參數也不相同。如圖2所示。
對于“先平移后旋轉”,函數調用順序為“先旋轉后平移”:
glRotatef(30,0.0,0.0,1.0;//繞z軸旋轉
glTranslatef(-R,0.0,0.0;//沿x軸平移R
對于“先旋轉后平移”,函數調用順序為“先平移后旋轉”:
glTranslatef(-Rcos 30°,-R sin 30°,0.0;
glRotatef(30,0.0,0.0,1.0;//繞z軸旋轉
在局部坐標系下看待變換時,爪模型的所有變換是相對于局部坐標系的各坐標軸。此時重要的是局部坐標系是固定于模型上的,隨模型的變化而變換(包括縮放變化)。此時代碼變換順序是自然順序,與希望的相同。例如對于“先平移后旋轉”這一順序,調用glRotatef函數時,爪模型繞全局坐標系旋轉30°的同時,爪模型的局部坐標系也繞全局坐標系z軸旋轉了30°。在接下來的glTranslatef函數中,爪模型繞自己旋轉后的局部坐標系(而不再是全局坐標系)x軸負向平移了一個R,因此到達了正確的安裝位置。
5.2 縮放變換時的狀態保存
由于在部件內部采用的是局部坐標系方式,其模型變換順序如上所述為自然順序,這在縮放變換時會產生問題。因為局部坐標系隨同模型一起縮放,特別是對于縮放比例沿各軸不一樣的不均勻縮放后,如果進行平移變換,則沿各軸的平移距離將隨之增大或縮小相應的縮放比例。特別是如果進行縮放變換的同時進行了旋轉變換,則局部坐標系的3個軸可能不再互相垂直。
為解決這一問題,可以采用操作矩陣堆棧的方法。即利用壓棧函數glPushMatrix記住當前位置,而用出棧函數glPopMatrix恢復當前位置。例如對于圖3所示的溜板箱模型,其刀架部分包含3個長方體。它們均是由單位正方體經過不均勻拉伸而成,以下代碼利用堆棧操作避免不均勻縮放造成的影響:
glPushMatrix(;//保存1的狀態
glScalef(1.25,0.5,1.25;//不均勻拉伸
glutSolidCube(1.0;
glPopMatrix(;//恢復1的狀態
glTranslatef(0.0,-0.35,0.0;//向上平移
glPushMatrix(;//保存2的狀態
glScalef(0.8,0.2,0.8;//不均勻拉伸
glutSolidCube(1.0;
glPopMatrix(;//恢復2的狀態
5.3 車床及部件的裝配
車床分為主軸箱、溜板箱、尾架等7個部件,這些部件內部的零件在裝配時采用局部坐標系的方式,而部件之間的裝配采用全局坐標系的方式。這樣便于調用不同部件的位置關系。
對于每個部件,均有一個基礎零件,它既是部件內其他各零件的參考基準,也是該部件在整個車床中的裝配基準。例如圖3溜板箱和圖4主軸箱、尾架中的0號零件均為基礎零件。即對于部件建模時,基礎零件的幾何中心位于全局坐標系的原點。
為了提高部件建模效率,同時也為了便于控制各零件的材質,對于每個零件建立顯示列表。在此基礎之上創建二級顯示列表以構造部件的幾何模型。而在函數glutDisplayFunc注冊的函數display中,調用二級顯示列表以完成車床裝配。圖5為機床裝配圖。圖5中紅綠藍三軸分別是全局坐標系的x,y和z軸,與車床坐標系一致,而視點位于第8象限。
為了突出顯示三爪卡盤及工件的幾何模型,在其附近設置定向光源并啟用光照模型。由此導致床身幾何模型比較暗淡,為此對床身和尾架在構建實體幾何模型的同時,也以較大的線寬構建對應的框架幾何模型。例如對于床身左邊的方塊,其主要代碼如下:
glutSolidCube(size_bed_left_box;//實體模型
glDisable(GL_LIGHTING;//取消光照
glColor3f(0.0,0.0,1.0;//設置為藍色
glLineWidth(2.0;//增加線寬
glutWireCube(size_bed_left_box;//線框模型
glLineWidth(1.0;//恢復線寬
glEnable(GL_LIGHTING;//打開光照
6 結 語
直接利用OpenGL進行幾何建模具有模型容量小、真實感強的優點,說明這一方法適應于機床加工虛擬仿真“模型簡化”和“模型重用”的特點。在此基礎上建立車床的三維幾何模型,為進一步研究機床加工幾何仿真和物理仿真提供一個較好的基礎。
參 考 文 獻
[1]Dave Shreiner,Mason Woo,Jackie Neider.OpenGL 編程指南[M].4版.鄧鄭祥,譯.北京:人民郵電出版社,2005.
[2]姜曉彤,趙正旭.基于OpenGL 技術的數控車床虛擬仿真系統研究[J].數控技術,2007(1:90-92.
[3]鄔再新,程萍,惠相君.基于OpenGL的數控車削動態仿真過程及圖形顯示[J].機械設計與制造,2007(2:98-99.
[4]朱軍.基于OpenGL的數控仿真系統研究與開發[D].南京:南京理工大學,2006.
[5]黃潔,杜平安,廖偉智.切削加工過程的仿真方法研究與實現[J].電子科技大學學報,2007,36(2:298-301.
[6]張登霞,陳剛,沙琳.OpenGL 在數控加工仿真系統中的應用[J].山東理工大學學報:自然科學版,2007,21(1):105-107.
[7]姜曉彤,趙正旭.基于OpenGL技術的數控車床虛擬仿真系統研究[J].現代電子技術,2007,30(1:90-92.