第八章 機器人可視化仿真系統的建立課件_第1頁
第八章 機器人可視化仿真系統的建立課件_第2頁
第八章 機器人可視化仿真系統的建立課件_第3頁
第八章 機器人可視化仿真系統的建立課件_第4頁
第八章 機器人可視化仿真系統的建立課件_第5頁
已閱讀5頁,還剩153頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

機器人可視化仿真

系統的建立機器人可視化仿真

系統的建立1主要內容1、前言2、可視化仿真系統概述3、機器人學的數學基礎4、機器人OpenGL形態建模基礎5、模塊化機器人三維模型的建立6、外部數據導入的OpenGL模型創建主要內容1、前言21、前言隨著機器人研究的不斷深入和機器人領域的不斷發展,機器人仿真系統作為機器人設計和研究的工具,發揮著越來越重要的作用,而機器人形態建模技術正是機器人仿真系統的核心技術之一。機器人的運動是由關節的運動引起的,而關節的位置是由連桿的長度和排列方式決定的,與連桿的具體形狀并無關系。因此,我們在研究機器人的運動機理時,可以對機器人進行某種抽象,將連桿抽象為一條直線,而將關節抽象為一點。但是,為了真實地仿真機器人的動作,在進行三維圖形顯示時又必須使每個桿件盡可能與實物完全一致,這樣才能達到仿真的目的,這一過程稱為機器人的形態建模。1、前言隨著機器人研究的不斷深入和機器人領域3現在比較常用的機器人形態建模技術有以下三種:⑴商用圖形軟件包,如AutoCAD、UGII、Solidwork等。⑵VRML(VirtualRealityModelingLanguage)語言。⑶OpenGL、DirectX等圖形開發接口。

OpenGL是SiliconGraphics公司在工作站上三維圖形規范的微機板,是一個與硬件無關的圖形軟件接口。OpenGL提供了基本的三維圖形功能:由點線和多邊形產生復雜三維實體;三維圖形變換;著色,材質,紋理,光照,陰影等真實感處理手段等,完全滿足可視化仿真形態模型的要求?,F在比較常用的機器人形態建模技術有以下三種:42、可視化仿真系統

仿真是利用數學模型在計算機上對系統進行實驗研究的過程??梢暬抡鎰t是數學模擬和科學計算可視化技術相結合的產物,它一般包括兩方面內容:一是將傳統數字仿真計算的結果轉換為圖形和圖像形式;二是仿真交互界面可視化,即具有可視交互和動畫展示能力,要求能夠實時跟蹤顯示仿真計算結果。如圖1所示為可視化仿真系統結構。其中數學模型著重反映系統的特征規律,而形態模型著重反映系統的物理構成,它們構成了可視化仿真的基礎。圖1可視化仿真系統的結構2、可視化仿真系統仿真是利用數學模型在計算機上5可視化仿真軟件的核心是數字模擬,同時又要具備可視化交互和可視化過程展現的特征,還須有實時性的特點。據此,規劃如圖2所示軟件功能結構。圖2可視化仿真軟件結構框圖圖中各模塊具有較強的獨立性,相互之間又以數據信息進行連接。對于一個確定的系統而言,形態模型中除屬性部分不確定外,是相對穩定的;而數學模型的變化也僅僅是激勵參數的改變,因此在模型交互部分將支持參數的交互編輯;數字模擬是針對系統數學模型的數值求解過程,應盡量使用現有的成熟算法或成熟軟件,確保結果的可靠性;圖形仿真部分一般包括以三維圖形表現的系統過程和以二維曲線形式表現的系統性能,它們是可視化仿真的重要特征??梢暬抡孳浖暮诵氖菙底帜M,同時又要具備可視化交互和63、機器人的數學基礎一.機器人的位置與姿態的描述用固聯在機器人末端執行器上的坐標系原點在基礎坐標中的位置來代表機器人末端的位置,用這個坐標系在基礎坐標系下的投影(即方向余弦)來表示機器人末端的姿態?;A坐標系通常固聯在機器人的基礎上。通常,采用一個矩陣T來表示機器人末端的位置與姿態。其中

是機器人末端的三個互相垂直的單位矢量,它們描述了機器人末端的姿態。是機器人末端的位置矢量。3、機器人的數學基礎一.機器人的位置與姿態的描述其中

是機器7二、機器人坐標系的建立1)劃分機器人模塊,建立機器人各關節的坐標系

創建的坐標系為正交的笛卡爾系,創建的基本過程是先給機器人各關節、桿件(基座為桿件0)編號,一般以關節轉軸為Z軸,基座關節處的X軸方向可以任取,其他關節則以相鄰兩關節轉軸的公垂線方向(離開前一關節)為X軸,Y軸與Z軸和X軸構成右手系。建立了坐標系即可以清晰的描述各桿件之間的關系,從而可以進一步求解關節變量。二、機器人坐標系的建立1)劃分機器人模塊,建立機器人各關節的82)計算出各關節的DH參數,確定關節變量所謂D-H(Denevie-Hartenberg)參數最初是在解決由關節變量定手部位姿的機器人運動學正問題提出來的,它包括4個基本參數,如下圖所示。圖8連桿坐標系2)計算出各關節的DH參數,確定關節變量所謂D-H(Dene93)求解各關節坐標系之間的齊次變換矩陣前面的變換是相對于動坐標系描述的,按照“從左到右”的原則,我們得到:相鄰連桿變換矩陣的一般表達式為:(根據熊有倫的《機器人學》)3)求解各關節坐標系之間的齊次變換矩陣前面的變換109自由度機器人的運動學建模與DH參數建立9自由度機器人DH參數表圖109自由度機器人DH坐標系9自由度機器人的運動學建模與DH參數建立9自由度114、機器人OpenGL形態建模基礎現實世界的三維物體需要在計算機中以二維平面的形式來表現。這在OpenGL中是通過一系列的變換來完成的。這些變換包括取景變換、幾何變換、投影變換、剪切變換、視口變換等。在算法上,它們是通過矩陣操作來實現的。OpenGL的變換關系在機器人的仿真系統中是非常重要的,其中的幾何變換正是我們用來建立機器人關節運動坐標系的基礎。用OpenGL中的幾何變換命令可以方便的按D-H法建立起機器人的坐標系。4、機器人OpenGL形態建模基礎現實世界的三維物124.1幾何變換

幾何變換是建立模型的基礎,通過它我們才能把模型的各個部分畫在正確的位置并對模型進行位置與姿態的控制?;镜膸缀巫儞Q有平移、旋轉和縮放。平移變換OpenGL中的平移變換命令為glTranslatef(x,y,z),其對應的變換矩陣為

相應的逆陣可以由glTranslatef(-x,-y,-z)得出。三維空間中物體的平移通過平移物體的各個點來實現。對于由一組多邊形面表示的物體,可將各表面的頂點作平移,然后繪制更新后的位置。4.1幾何變換相應的逆陣可以由glTranslatef(-132.旋轉變換OpenGL中的旋轉變換命令為glRotatef(θ,x,y,z),它有4個參數,第一個參數指定旋轉的度數,后三個參數構成一個向量,依次代表該向量的x、y、z分量。物體繞該向量旋轉時,遵循右手規則。其中比較簡單的情況是分別繞三個坐標軸的旋轉。例如:繞x軸的旋轉表示為:glRotatef(θ,1,0,0),其對應的變換矩陣為:相應的逆陣可以由glRotatef(-θ,1,0,0)得出。2.旋轉變換相應的逆陣可以由glRotatef(-θ,1,14繞y軸的旋轉表示為:glRotatef(θ,0,1,0)。

相應的逆陣可以由glRotatef(-θ,0,1,0)得出。繞z軸的旋轉表示為:glRotatef(θ,0,0,1)。

相應的逆陣可以由glRotatef(-θ,0,0,1)得出。繞y軸的旋轉表示為:glRotatef(θ,0,1,0)。153.縮放變換OpenGL中的縮放變換命令為glScalef(x,y,z),其對應的變換矩陣為

相應的逆陣可以由glScalef(1/x,1/y,1/z)得出。縮放變換使得物體大小和相對于坐標原點的位置發生變化,如果變換參數不同,則物體的相關尺寸也發生變化。我們可以用相同的縮放(x=y=z)來保持物體的原有形狀。3.縮放變換

164.2取景變換取景變換改變觀察點的位置和方向,包括平移和旋轉兩個操作。作取景變換有兩種方法:第一種方法是用glTranslatef()和glRotatef()函數。缺省情況下,觀察點位于原點,方向指向負z軸,這時如果將物體畫在原點,在屏幕上是顯示不出物體的。因此需要經過平移變換將觀察點與物體分離開來,可以用glTranslatef()來實現。如果想觀察物體的不同側面,可以用glRotatef()來實現。第二種方法是用gluLookAt()函數。通常,我們會在原點或其它一些方便的位置建立模型,然后從一個任意點觀察此模型,gluLookAt()正好能實現這個目的,它的函數原形為:voidgluLookAt(Gldoubleeyex,GLdoubleeyey,GLdoubleeyez,Gldoublecenterx,GLdoubleentery,Gldoublecenterz,GLdoubleupx,GLdoubleupy,GLdoubleupz);它有三組參數集合,分別定義視點的位置、瞄準的參考點并標識向上的方向。改變這三組參數,我們就可以從不同的位置來觀察物體了。4.2取景變換174.3投影變換

投影變換就是將三維物體變換為二維圖形,以便在平面上顯示。OpenGL提供了兩種投影方式:平行投影和透視投影。透視投影沿匯聚路徑將點投影到顯示平面上。對同樣大小的物體來說,它會引起“近大遠小”的現象,也就是離視點近的物體顯示起來比離視點遠的物體要大。在透視投影中,景物中的平行線投影后不再平行而是成了匯聚線。OpenGL中中的透視投影變換函數為: voidgluPerspective(GLdoublefovy,GLdoubleaspect,GLdoublezNear,GLdoublezFar);其中fovy為y方向上的視角,aspect為高度與寬度的比率,near和far分別為近剪切面和遠剪切面離視點的距離,投影體積如圖4所示。圖4gluPerspective()投影示意圖4.3投影變換投影變換就是將三維物體變換為184.4視窗變換

經過投影變換,三維物體轉化為二維圖形。要把它顯示在顯示屏上,還需要進行視窗變換。視窗就是一個用來繪制場景的矩形區域。視窗變換決定把場景中的點怎樣映射到繪圖區。OpenGL提供了一個定義視窗大小的函數:voidglViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight);其中,x和y定義視窗左下角在窗口中的位置;width和height分別是視窗的寬度和高度,它們都以像素為單位。視窗的一個重要作用是當應用程序窗口大小變化時,視窗能跟著作相應變化,它還可以用來實現多窗口視圖。這些變換過程對機器人形態模型的建立至關重要,只有徹底理解了這些變換過程,才能為機器人正確建立起形態模型。4.4視窗變換195、基于OpenGL的機器人形態模型的建立5.1基于OpenGL的形態模型建立的一般過程三維圖形及動畫場景的顯示,就是把所建立的三維空間模型,經過計算機的復雜處理,最終在計算機二維屏幕上顯示的過程。設計三維圖形軟件要經過以下步驟:

A.圖元建立三維模型。B.設置觀看物體的窗口和觀看點(視點)。C.設定各物體的屬性(如色彩、光照、紋理映射等)D.如果要物體動起來,還要進行圖形變換(如幾何變換、取景變換等)。E.三維圖形的二維化(投影變換和視窗變換)。流程如下:利用OpernGL的庫函數,我們按步驟實現三維圖形軟件的設計。流程如下:5、基于OpenGL的機器人形態模型的建立5.1基于Ope20一、建立三維模型三維模型的生成是OpenGL形態建模的核心工作,在5.2節中有專門論述。二.設置窗口和視點

1.設置窗口圖形顯示的區域稱為窗口。在繪制新的圖形前,窗口可能已經存在一些圖形OpenGL存儲了這些圖形繪圖狀態的信息,所以必須清除當前窗口的內容,以免影響繪圖的效果。流程順序為:關鍵程序代碼為:一、建立三維模型二.設置窗口和視點關鍵程序代碼為:21BOOLCPowerCubeView::PreCreateWindow(CREATESTRUCT&cs){ cs.style|=WS_CLIPCHILDREN|WS_CLIPSLBLINGS; returnCview::PreCreateWindow(cs);}//定義窗口及設置風格,此兩風格是OpenGL作圖窗口必須具備的。WS_CLIPCHILDREN僅對父窗體,在父窗體重繪時不對子窗體占有的區域進行繪制。WS_CLIPSIBLINGS僅對子窗體。在重繪時不對兄弟窗體占有的區域進行繪制(在相互重疊時)。glClearColor(0.0f,0.0f,0.0f,1.0f);//設置窗口背景色。glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除窗口的顏色緩存和深度緩存。BOOLCPowerCubeView::PreCreat222.定義視點

為了能夠從各個角度觀察機器人的形態,并實現縮放功能,我們需要綜合利用前面介紹的取景變換的兩種方法。OpenGL中參考坐標系的定義如圖5a所示,機器人基礎坐標系定義如圖5b所示。這時,需要將視點定義在正x軸進行觀察,參考點定義在原點,向上矢量方向為z軸方向,這樣就將圖2-5a的坐標系變為圖5b所示坐標系。用

gluLookAt(m_zoom,0,0,0,0,0,0,0,1.0);

來實現。參數m_zoom實現模型的縮放功能,視點離模型越近,顯示的模型越大。為了從不同角度觀察模型,需要將視點繞z軸或y軸旋轉,用如下方式實現:glRotated(m_yRotate,0.0,1.0,0.0);glRotated(m_zRotate,0.0,0.0,1.0);其中m_yRotate和m_zRotate兩個參數分別控制視點繞y軸和z軸旋轉的角度。圖5坐標系2.定義視點為了從不同角度觀察模型,需要將視點繞z軸或y軸旋23

m_zoom,m_yRotate,m_zRotate三個參數大小的改變是通過鼠標器來驅動的。用鼠標器的左鍵控制模型的觀察角度,右鍵控制模型的縮放。當鼠標器左鍵按下時,記錄當時鼠標器在屏幕上的位置,當鼠標器按下并移動時,計算前面記錄點的坐標與鼠標器當前點坐標之差。以x坐標值的變化作為視點繞z軸轉動的角度變化量,y坐標值的變化作為視點繞y軸轉動的角度變化量,從而達到對模型觀察角度的控制。用同樣的原理,實現對模型縮放的控制。這些對視點的控制方法在模型運動時同樣起作用。為使模型總是處于窗口中心,需要將視點沿y軸或z軸移動,用如下方式實現: glTranslated(0.0,m_yMove,m_zMove);其中m_yMove和m_zMove兩個參數分別控制視點沿y軸和z軸移動的步長。m_yMove和m_zMove兩個參數大小的改變是通過“坐標顯隱”對話框中的“步長”編輯鍵輸入的。而它們對視點的控制是通過鍵盤(Left,Right,Up,Down鍵)實現的。m_zoom,m_yRotate,m_z24三.動畫

三維動畫,就是把空間物體通過各種三維圖形變換,把它投影到視口中。一般動畫采用“畫---擦除---再畫”的方式,這樣會出現圖形間斷,產生閃爍現象??梢圆捎秒p緩存技術來解決這個問題。正在顯示的圖形存在前緩存中,而將下一幅要顯示的圖形繪制在后緩存中,當后緩存中的內容被要求顯示時,就會被拷貝到前緩存,顯示硬件不斷讀前緩存中的內容,并把結果顯示在屏幕上。這樣就提高了圖形顯示的交替速度,減少圖形間斷時間,從而減少圖形閃爍。OpenGL支持雙緩存技術,可以調用glDrawBuffer(GL_BACK)將繪制的圖形畫在后緩存,當完整的畫面在后臺視頻緩存中畫出后,調用SwapBuffers()函數,與前視頻緩存交換,顯示畫面。在交換前臺和后臺緩存的內容之前,必須進行同步工作,以免在前一幅畫面還沒有顯示完畢,就被交換出視頻緩存。OpenGL提供了兩個同步操作函數:glFlush()和glFinish()。動畫中前后兩幅圖形的交換是時間驅動的,我們通過Windows的計時器來實現。調用SetTimer(t)函數,它每隔時間t生一個WM_TIMER消息,然后為這個消息提供一個控制函數,在控制函數中取關節角的數值,輸入給模型繪制函數,調用InvalidateRect(NULL,FALSE)重畫窗口,這樣就形成了動畫效果。調用KillTimer()函數可以停止始終消息的發送,用它可以控制運動的停止。三.動畫25四.三維圖形的二維化三維圖形是通過二維視口(屏幕)來觀看的,因此,對三維圖形要進行透視變換和視窗變換。仿真軟件采用透視投影方式,用透視投影來顯示景物會更真實,這是因為眼球的成像方式正是透視投影的原理。用如下方法實現:gluPerspective(45,aspect,0.01,100.0);//aspect=width/height;經過投影變換后,模型失去了深度信息,因此必須進行消隱處理。在OpenGL中用如下方法實現:glClearDepth(1.0f);glEnable(GL_DEPTH_TEST);視窗是一個用來繪制場景的矩形區域,視窗變換決定把場景中的點怎樣映射到繪圖區,用如下方法實現: glViewport(0,0,width,height);width和height為生成的窗口的寬與高。視窗的高寬比與視景體的高寬比一致才使得圖形看起來協調,這一點在編程很重要的。四.三維圖形的二維化視窗是一個用來繪制場景的矩形區域,視265.2PowerCube模塊化機器人三維模型的建立圖6PowerCube模塊化機器人三維模型5.2PowerCube模塊化機器人三維模型的建立圖27這里所研究的是德國Amtec公司生產的9自由度PowerCube模塊化機器人。這種機器人主要用于科學研究和工業化生產,它的最大優點就是可以根據需要自己隨意組裝,所有的關節都實現了零件式的標準化生產。它的關節模塊分為兩種,一種是最常用的轉動關節,有三種規格,分別是110,90和70;另一種是線性關節,所有的關節通過都CAN總線與控制計算機相連。本文中的9自由度機器人由移動導軌、兩個110轉動關節、三個90轉動關節、一個70轉動關節、一個兩自由度腕部關節及一個線性抓手組成,如圖6所示。要對機器人進行遠程仿真及控制,第一步要做的工作就是建立機器人的三維模型。建立機器人的三維模型不僅涉及到機器人的具體型態、尺寸,而且與機器人關節運動的情況息息相關,這對于日后機器人的運動學、動力學分析異常重要。這里所研究的是德國Amtec公司生產的9自由28機器人三維模型建立的步驟為:⑴機器人關節尺寸的確定對機器人各個關節進行具體的測量或計算,取得機器人各個關節的具體尺寸大小?;蛘哂靡恍┤S制圖軟件由機器人的機械圖中導出。⑵機器人的基本結構參數列出機器人的結構參數,為下一步的建模工作做準備。⑶機器人坐標系的建立為機器人各個關節建立運動坐標系,使得各個坐標系的Z軸與運動副的軸線重合。⑷實現各個坐標系之間的變換相鄰兩個關節之間的相對位姿關系可以一個變換矩陣來表示,通過對一個坐標進行坐標旋轉和坐標平移,即可建立兩坐標之間的變換矩陣。⑸構架OpenGL的標準程序框架利用VisualC++開發環境,構建仿真系統的基本程序構架。下面將就上述步驟中的難點及重點分別做出論述。機器人三維模型建立的步驟為:29一、9自由度PowerCube模塊化機器人的基本結構參數PowerCube模塊化機器人都是由標準化生產的模塊組成的,它的各個模塊大小都是有統一的參數的。前面已經提到,本文中討論的9自由度機器人由兩個110轉動關節、三個90轉動關節、一個70轉動關節、一個兩自由度腕部關節及一個線性抓手組成,它的基本結構參數如下表所示:一、9自由度PowerCube模塊化機器人的基本結構參數30二、機器人坐標系的建立為了研究機器人的運動,需要在機器人的各個關節構件上建立相應的坐標系,如圖7所示。坐標系0是慣性參考系,它與視點變換前后的坐標系一致。坐標系i建立在關節i上,坐標系10建立在機器人末端抓手上,各個坐標系的Z軸與運動副的軸線重合。由上面的機器人圖形可以看出,機器人的每一個關節都是由兩個同軸、能夠旋轉的方塊組成的,而關節與關節之間通過法蘭狀的級聯器連接起來,除了腕部模塊之外,每個模塊只有一個運動關節。只有抓手是線性運動關節,其它關節全都是旋轉運動關節,這就為我們建立坐標系提供了很大的方便。二、機器人坐標系的建立31第八章機器人可視化仿真系統的建立課件32相鄰兩桿之間的相對位置關系可以通過坐標旋轉和坐標平移來建立,例如任意兩個坐標系i與坐標系j之間可以通過下列變換來建立起兩坐標系之間的變換矩陣:⑴沿x軸旋轉⑵沿x軸平移⑶沿z軸旋轉⑷沿z軸平移⑸沿y軸旋轉⑹沿y軸平移利用前面介紹的OpenGL幾何變換方法,可以方便地建立起兩坐標之間的變換矩陣。其核心代碼為: for(inti=1;i<10;i++) { glRotated(m_Module[i].rot.x,1.0f,0.0f,0.0f);//沿x軸旋轉 glTranslated(m_Module[i].trans.x,0.0,0.0);//沿x軸平移 glRotated(m_Module[i].rot.z,0.0f,0.0f,1.0f);//沿z軸旋轉 glTranslated(0.0f,0.0f,m_Module[i].trans.z);//沿z軸平移 glRotated(m_Module[i].rot.y,0.0f,1.0f,0.0f);//沿y軸旋轉 glTranslated(0.0f,m_Module[i].trans.y,0.0f);//沿y軸平移glPushMatrix(); DrawModule(i);//繪制第i個桿件glPopMatrix();}

DrawGripper(m_GripperWidth);//繪制抓手經過9次變換,繪制出9個動坐標系。在繞z軸旋轉的參量中,m_Module[i].rotz是繞第i個坐標系z軸轉動的變量。其它幾個參數則由機器人的結構參數來決定的。相鄰兩桿之間的相對位置關系可以通過坐標旋轉和坐標平移來建立,33在繪制各個桿件的過程中,要以當前坐標系為基礎進行繪制,繪制完成之后要恢復當前坐標系的位置,如DrawModule(i)中的一段核心代碼:

glPushMatrix();//保存當前坐標位置,下面開如繪制glColor3f(0.0f,0.0f,1.0f);//設置模塊顏色為藍色auxSolidBox(2*0.055,2*0.055,2*0.055);//繪制一個110的方塊(上)glTranslated(0.0,0.0,-0.165);//沿z軸平移-165mmauxSolidBox(2*0.055,2*0.055,2*0.055);//繪制一個110的方塊(下)glColor3f(1.0f,0.5f,0.0f);//設置連接法蘭顏色為棕黃色glTranslated(0.0,0.0,0.0575);//沿z軸平移57.5mmauxSolidBox(2*0.055,2*0.055,0.005);//模塊聯結下底板glTranslated(0.0,0.0,0.05);//沿z軸平移50mmauxSolidBox(2*0.055,2*0.055,0.005);//模塊的聯接上底板glTranslated(0.0,0.0,-0.0475);//沿z軸平移50mmgluCylinder(obj,0.05,0.05,0.045,20,1);//模塊的聯結圓柱體 glPopMatrix();

//恢復原始坐標位置

按照機器人理論,用D-H參數法建立坐標系只需z軸與x軸的變換,這里加上了y軸的變換只是為了使代碼更具有通用性。因此,在實際的機器人坐標變換中,y軸的移動和旋轉變換參數都為0。在繪制各個桿件的過程中,要以當前坐標系為基礎進行繪制,繪制完34二、VisualC++環境下基于OpenGL程序框架的構造VisualC++從4.2版本以后已完全支持OpenGLAPI。具有Windows編程經驗的人都知道,在Windows下用GDI作圖必須通過設備上下文(DeviceContext簡寫DC)調用相應的函數;用OpenGL作圖也是類似,OpenGL函數是通過“渲染上下文”(RenderingContext簡寫RC)完成三維圖形的繪制。Windows下的窗口和設備上下文支持位圖格式(PIXELFORMAT)屬性,和RC有著位圖結構上的一致。只要在創建RC時與一個DC建立聯系(RC也只能通過已經建立了位圖格式的DC來創建),OpenGL的函數就可以通過RC對應的DC畫到相應的顯示設備上。經過上面的分析,用VC進行OpenGL的編程就很顯然了,步驟如下:二、VisualC++環境下基于OpenGL程序框架的構造35(1)創建項目文件PowerCube,將所必須的OpenGL頭文件和庫文件包含進該工程。即:選擇Project/Settings菜單,在Link欄的Object/LibraryModules輸入域中添加openg132.lib,glu32.lib,glaux.lib。打開“CPowerCubeView.h”文件。將下幾行插入到文件中: #include<gl\gl.h> #include<gl\glu.h> #include<gl\glaux.h>(2)OpenGL只對WS_CLIPCHILDREN|WS_CLIPSIBLINGS類型窗口有效,將以下代碼添加到View類的PreCreateWindows()函數中:cs.style|=(WS_CLIPCHILDREN|WS_CLIPSIBLINGS);(1)創建項目文件PowerCube,將所必須的OpenGL36(3)設置點格式(PixelFormat)在建立翻譯描述表(RC)以前,必須設置設備的點格式。點格式指定了設備的繪制性質。例如,點是用RGBA模式表示或是使用顏色索引表模式表示,顯示是采用單緩存或是使用雙緩存等。Win32提供了四個函數管理點格式,這些函數包括:ChoosePixelFormat()返回和需求的點格式的最相近的點格式DescribePixelFormat()獲得給定點格式的信息GetPixelFormat()獲得給定設備的點格式SetPixelFormat()設置給定設備的點格式1)intChoosePixelFormat(HDChdc,CONSTPIXELFORMATDESCRIPTOR*pdf)參數:hdc:指定一個設備描述表(DC)pfd:指定具體的點格式。結構PIXELFORMATDESCRIPTOR在后面會具體講述,如果該函數調用成功,點格式的索引值被返回,否則,返回零。(3)設置點格式(PixelFormat)372)intDescribePixelFormat(HDChdc,intpixelformat,UINTnbytes,CONSTPIXELFORMATDESCRIPTOR*pfd)功能:這個函數獲得被pixelformat指定的點格式的信息,pixelformat是和設備描述表hdc聯系的。參數:hdc:指定一個設備描述表(DC)pixelformat:指定點格式的索引nbytes:結構pfd所使用內存空間的大小pfd:是一個PIXELFORMATDESCRIPTOR結構,在這個結構體中存放表示點格式的相關數據。如果該函數調用成功,返回值是設備描述表的點格式的最大索引,否則,返回零。3)intGetPixelFormat(HDChdc)功能:這個函數獲得指定的被選擇的當前點格式的索引。參數:hdc:指定一個設備描述表。如果這個函數調用成功,返回值是當前點格式的索引,否則,返回零。

2)intDescribePixelFormat(HDC384)BOOLSetPixelFormat(HDChdc,intpixelformat,CONSTPIXELFORMATDESCRIPTOR*pfd)功能:這個函數設置點格式參數:hdc:指定設備描述表(DC)pixelformat:指定被設置點格式的索引nbytes:結構pfd所使用內存空間的大小pfd:是一個PIXELFORMATDESCRIPTOR結構的指針如果該函數調用成功,返回值是TRUE,否則,返回FALSE。

4)BOOLSetPixelFormat(HDChdc39staticPIXELFORMATDESCRIPTORpixelDesc= {sizeof(PIXELFORMATDESCRIPTOR),//sizeofthispfd1, //versionnumberPFD_DRAW_TO_WINDOW|//supportwindowPFD_SUPPORT_OPENGL|//supportOpenGL PFD_DOUBLEBUFFER;//supportdoublebuffer PFD_TYPE_RGBA,//RGBAtype24,//24-bitcolordepth0,0,0,0,0,0,//colorbitsignored0,//noalphabuffer0,//shiftbitignored0,//noaccumulationbuffer0,0,0,0,//accumbitsignored32,//32-bitz-buffer0,//nostencilbuffer0,//noauxiliarybufferPFD_MAIN_PLANE,//mainlayer0,//reserved0,0,0//layermasksignored};PIXELFORMATDESCRIPTOR:點格式結構體staticPIXELFORMATDESCRIPTORp40在View類中的OnCreate函數中調用自定義的SetWindowPixelFormat()函數設置像素格式。BOOLCPowerCubeView::SetWindowPixelFormat(HDChDC){ staticPIXELFORMATDESCRIPTORpixelDesc= {sizeof(PIXELFORMATDESCRIPTOR),//sizeofthispfd//初始化點格式1, //versionnumberPFD_DRAW_TO_WINDOW|//supportwindowPFD_SUPPORT_OPENGL|//supportOpenGL PFD_DOUBLEBUFFER;//supportdoublebuffer PFD_TYPE_RGBA,//RGBAtype24,//24-bitcolordepth0,0,0,0,0,0,//colorbitsignored0,//noalphabuffer0,//shiftbitignored0,//noaccumulationbuffer0,0,0,0,//accumbitsignored32,//32-bitz-buffer0,//nostencilbuffer0,//noauxiliarybufferPFD_MAIN_PLANE,//mainlayer0,//reserved0,0,0//layermasksignored};

m_GLPixelIndex=ChoosePixelFormat(hDC,&pixelDesc);

在View類中的OnCreate函數中調用自定義的SetWi41if(m_GLPixelIndex==0)//Let'schooseadefaultindex. { m_GLPixelIndex=1; if(DescribePixelFormat(hDC,m_GLPixelIndex, sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc)==0) { returnFALSE; } } if(SetPixelFormat(hDC,m_GLPixelIndex,&pixelDesc)==FALSE) { returnFALSE; } returnTRUE;}if(m_GLPixelIndex==0)//Let'42(3)翻譯描述表(RenderingContext)每一個windows程序都必須有一個設備描述表(devicecontext).這個設備描述表中包含了圖形怎樣顯示在窗口的信息。例如,屏幕的繪制模式、圖形的映射模式以及一些圖形顯示在窗口必需的信息。使用MFC調用OpenGL函數庫編寫程序也必須使用設備描述表,同時,還要處理翻譯描述表。翻譯描述表是一種設備描述表的形式,在翻譯描述表中存放著OpenGL和操作系統聯系的信息。Win32提供了五個函數管理翻譯描述表,這五個函數以wgl為前綴,包括:wglCreateContext()建立一個翻譯描述表wglDeleteContext()刪除一個翻譯描述表wglGetCurrentContext()獲得當前的翻譯描述表wglGetCurrentDC()獲得和當前翻譯描述表聯系的設備描述表wglMakeCurrent()使指定的翻譯描述表為當前的(3)翻譯描述表(RenderingContext)431)HGLRCwglCreateContext(HDChdc)功能:建立一個新的翻譯描述表。這個翻譯描述表和設備描述表所指定的設備是相符的。參數:hdc:指定一個設備描述表(DC)如果該函數調用成功,返回值是翻譯描述表,否則,返回NULL。2)BOOLwglDeleteContext(HGLRChglrc)功能:刪除一個翻譯描述表。如果該函數調用成功,返回值TRUE,否則,返回FALSE。3)HGLRCwglGetCurrentContext(void)功能:獲得當前的翻譯描述表。如果這個函數調用成功,返回當前的翻譯描述表,否則,返回NULL。

1)HGLRCwglCreateContext(HDC444)HDCwglGetCurrentDC(void)功能:獲得和當前翻譯描述表相聯系的設備描述表如果該函數調用成功,返回和當前的翻譯描述表相聯系的設備描述表,否則,返回NULL。5)BOOLwglMakeCurrent(HDChdc,HGLRChglrc)功能:使所指定的翻譯描述表是當前的。這個函數調用以后,所有的OpenGL繪制操作是在被hdc指定的設備上進行的。參數:hdc:指定一個設備描述表hglrc:指定一個翻譯描述表如果該函數調用成功,返回值TRUE,否則,返回FALSE。在使用翻譯描述表以前,必須建立一個翻譯描述表。在使用翻譯描述表時,要使用函數wglMakeCurrent(),使所使用的翻譯描述表成為當前的,不用的翻譯描述表要調用函數wglDeleteContext()來刪除。

4)HDCwglGetCurrentDC(void)45(4)在View類中的OnCreate函數中調用自定義的CreateViewGLContext()函數生成當前RC。BOOLCPowerCubeView::CreateViewGLContext(HDChDC){m_hGLContext=wglCreateContext(hDC); if(m_hGLContext==NULL) {returnFALSE; } if(wglMakeCurrent(hDC,m_hGLContext)==FALSE) {returnFALSE; } returnTRUE;}(4)在View類中的OnCreate函數中調用自定義的Cr46程序執行完畢后,要清除這個RC,這個任務在View類中OnDestroy函數中完成:voidCPowerCubeView::OnDestroy(){if(wglGetCurrentContext()!=NULL) {//maketherenderingcontextnotcurrentwglMakeCurrent(NULL,NULL); } if(m_hGLContext!=NULL) {wglDeleteContext(m_hGLContext); m_hGLContext=NULL; }//NowtheassociatedDCcanbereleased. CView::OnDestroy();}程序執行完畢后,要清除這個RC,這個任務在View類中OnD47(5)在View類中的OnDraw函數中調用自定義的繪制模型函數RenderScene來完成模型繪繪制的工作。用SwapBuffers函數交換兩個緩存中的內容顯示模型。這樣,一個基于OpenGL標準的程序框架已經構造好。(5)在View類中的OnDraw函數中調用自定義的繪制模型486、外部數據導入的OpenGL三維模型的創建(1)OpenGL自身創建復雜三維模型比較困難、不直接外部數據文件OpenGL提供的所有功能及工具,我們找不到關于與外部建模工具交互的相關函數本身并不要求開發者將模型數據寫成固定格式,因此,OpenGL不提供對其他建模工具或CAD軟件生成的數據文件的支持。這樣一來,對于復雜的圖形應用程序,尤其是可視化仿真及演示系統的應用,程序員就不得不花費大量的時間,逐條語句地完成建模工作。(2)外部建模工具生成復雜三維模型非常簡單,并可以將文件以一定的格式進行保存,如3DMax可創建并生成.3DS文件的三維模型,Pro/E可創建并生成.stl文件的三維模型,AutoCAD可創建并生成.DXF文件的三維模型,其他的還有.obj文件等。(3)如果能在OpenGL應用程序中采用一定方法直接調用這些數據文件,并進行繪制,不僅能極大地降低開發周期及成本,更重要的是還可以提高應用程序的可擴展性能。(4)具體步驟:(1)用三維模型軟件生成三維模型,并保存文件;(2)分析文件的數據結構,并據此導入(讀入)文件;(3)將三維模型在OpenGL的語法形式顯示。這里采用Pro/E創建并生成的stl文件三維模型并在OpenGL環境中顯示為例加以說明。6、外部數據導入的OpenGL三維模型的創建(1)Open49(1)Pro/E環境下創建三維實體并保存stl文件Pro/E三維實體創建(1)Pro/E環境下創建三維實體并保存stl文件Pro/E50第八章機器人可視化仿真系統的建立課件51第八章機器人可視化仿真系統的建立課件52(1)草繪環境下創建拉伸平面(1)草繪環境下創建拉伸平面53(2)拉伸特征生成實體(2)拉伸特征生成實體54(3)其中1個端頭倒圓角(3)其中1個端頭倒圓角55將prt零件保存為STL文件將prt零件保存為STL文件56第八章機器人可視化仿真系統的建立課件57第八章機器人可視化仿真系統的建立課件58第八章機器人可視化仿真系統的建立課件59生成的stl文件格式生成的stl文件格式60(2)stl文件的格式與讀寫(2)stl文件的格式與讀寫61(1)定義三角面片結構體typedefstruct_FACESTRUCT{ float Normal[3]; float v1[3],v2[3],v3[3]; }FaceStruct;FaceStructprt1[500];(1)定義三角面片結構體62(2)讀入數據,保存到結構體中(2)讀入數據,保存到結構體中63第八章機器人可視化仿真系統的建立課件64sscanf的用法sscanf的用法65(3)stl文件對應三角面片的顯示

(3)stl文件對應三角面片的顯示

66第八章機器人可視化仿真系統的建立課件677、VC的MFC工程下的二維仿真繪圖(1)單一曲線示例7、VC的MFC工程下的二維仿真繪圖(1)單一曲線示例68(2)多條曲線示例(2)多條曲線示例69基于對話框的二維繪圖的主要步驟對話框資源及其類文件的創建對話框繪圖區域位置、大小的創建繪圖區域網格的創建橫縱坐標標度的創建對于多條曲線繪制,圖例的創建變化曲線的繪制

基于對話框的二維繪圖的主要步驟對話框資源及其類文件的創建70對話框資源及其類文件的創建1)對話框資源的創建對話框資源及其類文件的創建1)對話框資源的創建712)對話框資源對應的類文件(.cpp,.h)的創建2)對話框資源對應的類文件(.cpp,.h)的創建72(1)總體窗口大小、視口大小、坐標系原點的設置CClientDCdc(this);//devicecontextforpaintingCRectrc;dc.SetMapMode(MM_ANISOTROPIC);//設定映像模式dc.SetWindowOrg(-50,190);//原默認窗口坐標系原點在新坐標系中的坐標值dc.SetWindowExt(1150,-380);//窗口范圍在新坐標系下的范圍值(x,-y),-y表示與默認y坐標朝下方向相反,即新坐標y軸朝上GetClientRect(rc);dc.SetViewportOrg(0,0);//設置視口原點(相對應于原坐標系)dc.SetViewportExt(rc.Width(),rc.Height());//(視口大?。?/p>

2、對話框繪圖區域位置、大小的創建坐標映射方式改變為MM_ANISOTROPIC方式,即各向異性的意思,在這種坐標方式下,X軸和Y軸的邏輯單位可以進行任意的縮入。改變坐標映射方式后,就要確定窗口大小和視口大小,注意窗口大小就是我們在屏幕上所見的尺寸。通過函數得到顯示器和打印機每邏輯英寸的像素數量,然后對視口大小進行相應的縮放,就可以便利屏幕上的顯示和打印機的輸出是一致的了。SetMapMode將邏輯單位轉換為設備單位的度量單位,并定義了設備的X、Y軸的方向

(1)總體窗口大小、視口大小、坐標系原點的設置2、對話框繪73第八章機器人可視化仿真系統的建立課件74(2)實際完成的繪圖區域的設置CBrushbr,*pOldBrush; br.CreateSolidBrush(RGB(255,255,255)); pOldBrush=dc.SelectObject(&br); dc.Rectangle(0,180,1000,-180); dc.SelectObject(pOldBrush); br.DeleteObject();

(2)實際完成的繪圖區域的設置75(3)繪圖區域網格的創建(3)繪圖區域網格的創建764、橫縱坐標標度的創建4、橫縱坐標標度的創建775、對于多條曲線繪制,圖例的創建5、對于多條曲線繪制,圖例的創建786、變化曲線的繪制6、變化曲線的繪制79機器人可視化仿真

系統的建立機器人可視化仿真

系統的建立80主要內容1、前言2、可視化仿真系統概述3、機器人學的數學基礎4、機器人OpenGL形態建模基礎5、模塊化機器人三維模型的建立6、外部數據導入的OpenGL模型創建主要內容1、前言811、前言隨著機器人研究的不斷深入和機器人領域的不斷發展,機器人仿真系統作為機器人設計和研究的工具,發揮著越來越重要的作用,而機器人形態建模技術正是機器人仿真系統的核心技術之一。機器人的運動是由關節的運動引起的,而關節的位置是由連桿的長度和排列方式決定的,與連桿的具體形狀并無關系。因此,我們在研究機器人的運動機理時,可以對機器人進行某種抽象,將連桿抽象為一條直線,而將關節抽象為一點。但是,為了真實地仿真機器人的動作,在進行三維圖形顯示時又必須使每個桿件盡可能與實物完全一致,這樣才能達到仿真的目的,這一過程稱為機器人的形態建模。1、前言隨著機器人研究的不斷深入和機器人領域82現在比較常用的機器人形態建模技術有以下三種:⑴商用圖形軟件包,如AutoCAD、UGII、Solidwork等。⑵VRML(VirtualRealityModelingLanguage)語言。⑶OpenGL、DirectX等圖形開發接口。

OpenGL是SiliconGraphics公司在工作站上三維圖形規范的微機板,是一個與硬件無關的圖形軟件接口。OpenGL提供了基本的三維圖形功能:由點線和多邊形產生復雜三維實體;三維圖形變換;著色,材質,紋理,光照,陰影等真實感處理手段等,完全滿足可視化仿真形態模型的要求?,F在比較常用的機器人形態建模技術有以下三種:832、可視化仿真系統

仿真是利用數學模型在計算機上對系統進行實驗研究的過程。可視化仿真則是數學模擬和科學計算可視化技術相結合的產物,它一般包括兩方面內容:一是將傳統數字仿真計算的結果轉換為圖形和圖像形式;二是仿真交互界面可視化,即具有可視交互和動畫展示能力,要求能夠實時跟蹤顯示仿真計算結果。如圖1所示為可視化仿真系統結構。其中數學模型著重反映系統的特征規律,而形態模型著重反映系統的物理構成,它們構成了可視化仿真的基礎。圖1可視化仿真系統的結構2、可視化仿真系統仿真是利用數學模型在計算機上84可視化仿真軟件的核心是數字模擬,同時又要具備可視化交互和可視化過程展現的特征,還須有實時性的特點。據此,規劃如圖2所示軟件功能結構。圖2可視化仿真軟件結構框圖圖中各模塊具有較強的獨立性,相互之間又以數據信息進行連接。對于一個確定的系統而言,形態模型中除屬性部分不確定外,是相對穩定的;而數學模型的變化也僅僅是激勵參數的改變,因此在模型交互部分將支持參數的交互編輯;數字模擬是針對系統數學模型的數值求解過程,應盡量使用現有的成熟算法或成熟軟件,確保結果的可靠性;圖形仿真部分一般包括以三維圖形表現的系統過程和以二維曲線形式表現的系統性能,它們是可視化仿真的重要特征??梢暬抡孳浖暮诵氖菙底帜M,同時又要具備可視化交互和853、機器人的數學基礎一.機器人的位置與姿態的描述用固聯在機器人末端執行器上的坐標系原點在基礎坐標中的位置來代表機器人末端的位置,用這個坐標系在基礎坐標系下的投影(即方向余弦)來表示機器人末端的姿態?;A坐標系通常固聯在機器人的基礎上。通常,采用一個矩陣T來表示機器人末端的位置與姿態。其中

是機器人末端的三個互相垂直的單位矢量,它們描述了機器人末端的姿態。是機器人末端的位置矢量。3、機器人的數學基礎一.機器人的位置與姿態的描述其中

是機器86二、機器人坐標系的建立1)劃分機器人模塊,建立機器人各關節的坐標系

創建的坐標系為正交的笛卡爾系,創建的基本過程是先給機器人各關節、桿件(基座為桿件0)編號,一般以關節轉軸為Z軸,基座關節處的X軸方向可以任取,其他關節則以相鄰兩關節轉軸的公垂線方向(離開前一關節)為X軸,Y軸與Z軸和X軸構成右手系。建立了坐標系即可以清晰的描述各桿件之間的關系,從而可以進一步求解關節變量。二、機器人坐標系的建立1)劃分機器人模塊,建立機器人各關節的872)計算出各關節的DH參數,確定關節變量所謂D-H(Denevie-Hartenberg)參數最初是在解決由關節變量定手部位姿的機器人運動學正問題提出來的,它包括4個基本參數,如下圖所示。圖8連桿坐標系2)計算出各關節的DH參數,確定關節變量所謂D-H(Dene883)求解各關節坐標系之間的齊次變換矩陣前面的變換是相對于動坐標系描述的,按照“從左到右”的原則,我們得到:相鄰連桿變換矩陣的一般表達式為:(根據熊有倫的《機器人學》)3)求解各關節坐標系之間的齊次變換矩陣前面的變換899自由度機器人的運動學建模與DH參數建立9自由度機器人DH參數表圖109自由度機器人DH坐標系9自由度機器人的運動學建模與DH參數建立9自由度904、機器人OpenGL形態建?;A現實世界的三維物體需要在計算機中以二維平面的形式來表現。這在OpenGL中是通過一系列的變換來完成的。這些變換包括取景變換、幾何變換、投影變換、剪切變換、視口變換等。在算法上,它們是通過矩陣操作來實現的。OpenGL的變換關系在機器人的仿真系統中是非常重要的,其中的幾何變換正是我們用來建立機器人關節運動坐標系的基礎。用OpenGL中的幾何變換命令可以方便的按D-H法建立起機器人的坐標系。4、機器人OpenGL形態建模基礎現實世界的三維物914.1幾何變換

幾何變換是建立模型的基礎,通過它我們才能把模型的各個部分畫在正確的位置并對模型進行位置與姿態的控制。基本的幾何變換有平移、旋轉和縮放。平移變換OpenGL中的平移變換命令為glTranslatef(x,y,z),其對應的變換矩陣為

相應的逆陣可以由glTranslatef(-x,-y,-z)得出。三維空間中物體的平移通過平移物體的各個點來實現。對于由一組多邊形面表示的物體,可將各表面的頂點作平移,然后繪制更新后的位置。4.1幾何變換相應的逆陣可以由glTranslatef(-922.旋轉變換OpenGL中的旋轉變換命令為glRotatef(θ,x,y,z),它有4個參數,第一個參數指定旋轉的度數,后三個參數構成一個向量,依次代表該向量的x、y、z分量。物體繞該向量旋轉時,遵循右手規則。其中比較簡單的情況是分別繞三個坐標軸的旋轉。例如:繞x軸的旋轉表示為:glRotatef(θ,1,0,0),其對應的變換矩陣為:相應的逆陣可以由glRotatef(-θ,1,0,0)得出。2.旋轉變換相應的逆陣可以由glRotatef(-θ,1,93繞y軸的旋轉表示為:glRotatef(θ,0,1,0)。

相應的逆陣可以由glRotatef(-θ,0,1,0)得出。繞z軸的旋轉表示為:glRotatef(θ,0,0,1)。

相應的逆陣可以由glRotatef(-θ,0,0,1)得出。繞y軸的旋轉表示為:glRotatef(θ,0,1,0)。943.縮放變換OpenGL中的縮放變換命令為glScalef(x,y,z),其對應的變換矩陣為

相應的逆陣可以由glScalef(1/x,1/y,1/z)得出??s放變換使得物體大小和相對于坐標原點的位置發生變化,如果變換參數不同,則物體的相關尺寸也發生變化。我們可以用相同的縮放(x=y=z)來保持物體的原有形狀。3.縮放變換

954.2取景變換取景變換改變觀察點的位置和方向,包括平移和旋轉兩個操作。作取景變換有兩種方法:第一種方法是用glTranslatef()和glRotatef()函數。缺省情況下,觀察點位于原點,方向指向負z軸,這時如果將物體畫在原點,在屏幕上是顯示不出物體的。因此需要經過平移變換將觀察點與物體分離開來,可以用glTranslatef()來實現。如果想觀察物體的不同側面,可以用glRotatef()來實現。第二種方法是用gluLookAt()函數。通常,我們會在原點或其它一些方便的位置建立模型,然后從一個任意點觀察此模型,gluLookAt()正好能實現這個目的,它的函數原形為:voidgluLookAt(Gldoubleeyex,GLdoubleeyey,GLdoubleeyez,Gldoublecenterx,GLdoubleentery,Gldoublecenterz,GLdoubleupx,GLdoubleupy,GLdoubleupz);它有三組參數集合,分別定義視點的位置、瞄準的參考點并標識向上的方向。改變這三組參數,我們就可以從不同的位置來觀察物體了。4.2取景變換964.3投影變換

投影變換就是將三維物體變換為二維圖形,以便在平面上顯示。OpenGL提供了兩種投影方式:平行投影和透視投影。透視投影沿匯聚路徑將點投影到顯示平面上。對同樣大小的物體來說,它會引起“近大遠小”的現象,也就是離視點近的物體顯示起來比離視點遠的物體要大。在透視投影中,景物中的平行線投影后不再平行而是成了匯聚線。OpenGL中中的透視投影變換函數為: voidgluPerspective(GLdoublefovy,GLdoubleaspect,GLdoublezNear,GLdoublezFar);其中fovy為y方向上的視角,aspect為高度與寬度的比率,near和far分別為近剪切面和遠剪切面離視點的距離,投影體積如圖4所示。圖4gluPerspective()投影示意圖4.3投影變換投影變換就是將三維物體變換為974.4視窗變換

經過投影變換,三維物體轉化為二維圖形。要把它顯示在顯示屏上,還需要進行視窗變換。視窗就是一個用來繪制場景的矩形區域。視窗變換決定把場景中的點怎樣映射到繪圖區。OpenGL提供了一個定義視窗大小的函數:voidglViewport(GLintx,GLinty,GLsizeiwidth,GLsizeiheight);其中,x和y定義視窗左下角在窗口中的位置;width和height分別是視窗的寬度和高度,它們都以像素為單位。視窗的一個重要作用是當應用程序窗口大小變化時,視窗能跟著作相應變化,它還可以用來實現多窗口視圖。這些變換過程對機器人形態模型的建立至關重要,只有徹底理解了這些變換過程,才能為機器人正確建立起形態模型。4.4視窗變換985、基于OpenGL的機器人形態模型的建立5.1基于OpenGL的形態模型建立的一般過程三維圖形及動畫場景的顯示,就是把所建立的三維空間模型,經過計算機的復雜處理,最終在計算機二維屏幕上顯示的過程。設計三維圖形軟件要經過以下步驟:

A.圖元建立三維模型。B.設置觀看物體的窗口和觀看點(視點)。C.設定各物體的屬性(如色彩、光照、紋理映射等)D.如果要物體動起來,還要進行圖形變換(如幾何變換、取景變換等)。E.三維圖形的二維化(投影變換和視窗變換)。流程如下:利用OpernGL的庫函數,我們按步驟實現三維圖形軟件的設計。流程如下:5、基于OpenGL的機器人形態模型的建立5.1基于Ope99一、建立三維模型三維模型的生成是OpenGL形態建模的核心工作,在5.2節中有專門論述。二.設置窗口和視點

1.設置窗口圖形顯示的區域稱為窗口。在繪制新的圖形前,窗口可能已經存在一些圖形OpenGL存儲了這些圖形繪圖狀態的信息,所以必須清除當前窗口的內容,以免影響繪圖的效果。流程順序為:關鍵程序代碼為:一、建立三維模型二.設置窗口和視點關鍵程序代碼為:100BOOLCPowerCubeView::PreCreateWindow(CREATESTRUCT&cs){ cs.style|=WS_CLIPCHILDREN|WS_CLIPSLBLINGS; returnCview::PreCreateWindow(cs);}//定義窗口及設置風格,此兩風格是OpenGL作圖窗口必須具備的。WS_CLIPCHILDREN僅對父窗體,在父窗體重繪時不對子窗體占有的區域進行繪制。WS_CLIPSIBLINGS僅對子窗體。在重繪時不對兄弟窗體占有的區域進行繪制(在相互重疊時)。glClearColor(0.0f,0.0f,0.0f,1.0f);//設置窗口背景色。glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除窗口的顏色緩存和深度緩存。BOOLCPowerCubeView::PreCreat1012.定義視點

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論