計算機圖形學上機實驗報告_第1頁
計算機圖形學上機實驗報告_第2頁
計算機圖形學上機實驗報告_第3頁
計算機圖形學上機實驗報告_第4頁
計算機圖形學上機實驗報告_第5頁
已閱讀5頁,還剩19頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、計算機圖形學實驗報告姓名: 學號: 班級: 目錄實驗一 OpenGL程序結構練習3實驗二 基本圖形生成6實驗三 交互式控制9實驗四 圖形基本變換12實驗五 三維圖形生成及顯示15實驗六 三維圖形生成及顯示19實驗一 OpenGL程序結構練習【實驗目的】1. 熟悉C語言環境下OpenGL的使用方法;2. 了解OpenGL程序的基本結構。【實驗原理】絕大多數OpenGL程序具有類似的結構,包含下述函數 main():定義回調函數,打開一個或多個具有指定屬性的窗口,進入事件循環(最后一條可執行語句)init():設置狀態變量、視圖、屬性、回調、顯示函數、輸入和窗口函數 #include <GL

2、/glut.h> / glut.h includes gl.h and glu.hvoid display() void init() int main( int argc, char *argv) 【實驗內容】1.了解程序中各個結構的功能;2.用OpenGL生成三角形。【實驗步驟及結果】1.導入OpenGL的glut32.lib和glut.h文件:將.lib文件存放到C語言程序文件夾的Library下,.h文件放到Include下;導入應用程序擴展文件glut32.dll,存放到system文件夾下。2.打開VC 6.0,新建工程,并命名為text1,如圖1.圖 13.在工程text1

3、下新建源文件,并命名為text1.cpp。4.編寫代碼并編譯鏈接,如圖2所示。圖 25.運行,結果如圖3所示。圖 3實驗二 基本圖形生成【實驗目的】1.熟悉OpenGL的程序結構,并了解各部分的功能。2.學會應用OpenGL語言繪制出點,線,多邊形。【實驗原理】1. GLUT函數glutInit使得應用程序可以獲取命令行參數并初始化系統。glutInitDisplayMode設置窗口的屬性、RGB顏色、單緩沖區 、屬性按照邏輯或組合在一起。glutWindowSize 以像素為單位定義窗口的尺寸。glutWindowPosition 定義窗口左上角在顯示器上的位置。glutCreateWind

4、ow創建窗口,標題來自于參數值。glutDisplayFunc定義顯示回調函數。glutMainLoop進入無窮的事件循環。2. 變換與視圖在OpenGL中投影是利用投影矩陣乘法(變換)進行的,由于只存在一個變換函數系列,因此必須先設置矩陣模式。glMatrixMode(GL_PROJECTION)變換函數是累加在一起的,因此需要從單位陣開始,然后把它改變為一個投影矩陣以定義視景體。3. OpenGL的基本幾何形狀在display模塊下采用glBegin()調用,如:glBegin(GL_POLYGON)既是調用多邊形繪制方式。4. 顏色與狀態顏色的每個分量在幀緩沖區中是分開存貯的,在緩沖區中

5、通常每個分量占用8位字節。注意在函數glColor3f中顏色的變化范圍是從0.0(無)1.0(全部), 而在glColor3ub中顏色值的變化范圍是從0到255。在OpenGL程序中,由glColor*設置的顏色成為狀態的一部分,后續構造過程將使用這一顏色,直至它被修改為止。顏色與其它屬性不是對象的一部分,但是在渲染對象時,要把這些屬性賦給對象,可以按下述過程創建具有不同顏色的頂點 glColor()glVertex()glColor()glVertex()【實驗內容】1.用OpenGL生成點、線。2.用OpenGL生成多邊形。【實驗步驟及結果】1.打開VC 6.0,新建名為text2的工程文

6、件,并新建名為text2.cpp的源文件。2.編寫代碼,編譯并鏈接,如圖1所示。圖 13.運行,結果如圖2所示。圖 2 實驗三 交互式控制【實驗目的】1. 了解OpenGL中交互式控制的原理。2. 學會運用OpenGL程序實現鼠標和鍵盤對圖形及窗口的控制。【實驗原理】1. GLUT中的回調函數GLU識別在各種窗口系統(Windows, X, Macintosh)中都有的一組事件:glutDisplayFunc /顯示功能glutMouseFunc /鼠標功能glutReshapeFunc /重置形狀功能glutKeyboardFunc /鍵盤功能glutIdleFunc /閑置停頓功能glut

7、MotionFunc /動作請求功能glutPassiveMotionFunc /被動請求功能2. 鼠標回調函數glutMouseFunc(mymouse) void mymouse(GLint btn, GLint state, GLint x, GLint y) 其中btn的值可能是GLUT_LEFT_BUTTON、GLUT_MIDDLE_BUTTON、 GLUT_RIGHT_BUTTON,表示哪個按鈕導致了事件發生;state表示相應按鈕的狀態: GL_UP, GL_DOWN ;x, y表示在窗口中的位置。3. 鍵盤的應用glutKeyboardFunc(mykey)void mykey

8、(GLubyte key, GLint x, GLint y)返回鍵盤上被按下鍵的ASCII碼和鼠標位置。注意在GLUT中并不把釋放鍵做為一個事件。 【實驗內容】1.用OpenGL生成一個多邊形。2.在多邊形的基礎上實現用鼠標控制圖形窗口的切換,并且能通過鼠標控制變換圖形顏色。3.在上述基礎上實現用鍵盤控制圖形窗口的關閉。【實驗步驟及結果】1.打開VC 6.0,新建名為text3的工程文件,在工程內新建名為text3.cpp的源文件。2.編寫代碼,編譯并鏈接,如圖1所示。圖 13.程序運行結果如下:附:鼠標控制方式如圖2所示:鼠標左鍵控制顯示display2的螺帽狀圖形,右鍵控制顯示displ

9、ay1的矩形。圖 2在display1中,定義for循環和n的整型變量,實現矩形顏色的變化,如圖3所示:n=7時,即可實現8種顏色的變換,在顏色上調用glCoclor3fv(coclorn)定義顯示的顏色。圖 3鍵盤控制方式:當鍵入Q或q時,圖形顯示窗口關閉運行結果: 實驗四 圖形基本變換【實驗目的】1.了解OpenGL下圖形窗口的坐標表示;2.掌握圖形坐標的矩陣運算方法;3.能運用坐標的矩陣算法對圖形進行伸縮、對稱、錯切變換。【實驗原理】1.空間圖形的矩陣表示若用一個行向量 x1 x2 xn 表示n維空間中一個點 坐標,那么n維空間中m個點坐標就可以表示為一個向量 集合:2. 圖形變換圖形變

10、換可以通過對表示圖形坐標的矩陣進行運算來實現,稱為矩陣變換法。矩陣變換法的一般形式:(1)伸縮變換當a=d,圖形沿x方向和y方向等比例縮放;當a=d>1,圖形沿x、y方向等比例放大;當0<a=d<1,圖形沿x 、y方向等比例縮小。(2)對稱變換和伸縮變換相似,如:關于x軸對稱:(3)錯切變換【實驗內容】在OpenGL下繪制一個基本圖形,并實現該圖形的伸縮、對稱、錯切變換。【實驗步驟及結果】1.打開VC 6.0,新建名為text4的工程文件,并新建名為text4.cpp的源文件。2.編寫代碼,編譯并鏈接,如圖1所示。圖 13. 程序運行結果如圖2所示:圖 2其中綠色為原圖,青藍

11、色為y=-x對稱,黃色為0.6倍縮放后關于x軸對稱,紅色為x方向錯切。實驗五 三維圖形生成及顯示【實驗目的】1.了解OpenGL下3D圖形生成的原理;2.學會運用OpenGL生成簡單的三維圖形。【實驗原理】1. OpenGL中的照相機在OpenGL中,初始的世界標架和照相機標架相同初始的模型視圖矩陣是單位陣照相機位于原點,并指向z軸的負向;OpenGL也指定了默認的視景體,它是一個中心在原點的邊長為2的立方體。缺省的投影矩陣是單位陣。移動照相機:可以利用一系列旋轉和平移把照相機定位到任意位置。 例如,為了得到側視圖:旋轉照相機: R;把照相機從原點移開: T;模型視圖矩陣C = TR。注意最后

12、指定的變換是最先被應用的變換glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslated(0.0, 0.0, -d);glRotated(-90.0, 0.0, 1.0, 0.0);2. 視圖定位矩陣LookAt()函數:在GLU庫中包含了函數gluLookAt(),提供了創建定位照相機所用的模型視圖矩陣的簡單方法。注意在設置中需要一個向上的方向初始化,即上載單位陣也可以與模型變換復合在一起。例如:平行于軸的立方體的等角投影glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(1.,1.,

13、1.,0.,0.,0.,0.,1.,0.);3.投影變換投影變換 投影變換就是定義一個可視空間,可視空間以外的物體不會被繪制到屏幕上。(注意,從現在起,坐標可以不再是-1.0到1.0了!) OpenGL支持兩種類型的投影變換,即透視投影和正投影。投影也是使用矩陣來實現的。如果需要操作投影矩陣,需要以GL_PROJECTION為參數調用glMatrixMode()函數。即為: glMatrixMode(GL_PROJECTION); 通常,我們需要在進行變換前把當前矩陣設置為單位矩陣。 glLoadIdentity(); 透視投影所產生的結果類似于照片,有近大遠小的效果,比如在火車頭內向前照一個

14、鐵軌的照片,兩條鐵軌似乎在遠處相交了。【實驗內容】1.用OpenGL生成一個球體;2.為了便于觀察,在程序中加入交互式控制模式,可以通過鼠標或鍵盤控制圖形的變化。【實驗步驟及結果】1.打開VC 6.0,新建名為text5的工程文件,并新建名為text5.cpp的源文件。2.編寫代碼,編譯并鏈接,如圖1所示。圖 13. 程序運行結果如圖2所示:圖 24.控制鍵盤方向鍵對圖形進行變換,如圖3所示圖 3實驗六 三維圖形生成及顯示【實驗目的】1.了解OpenGL下生成光照模型的方法;2.學會在OpenGL中創建光源,對3D圖形進行明暗處理。【實驗原理】1. 簡單光照明模型模擬物體表面的光照明物理現象的

15、數學模型光照明模型。簡單光照明模型只考慮光源對物體的直接光照。Phong光照明模型:簡單光照明模型模擬物體表面對光的反射作用,光源為點光源。反射作用分為鏡面反射(Specular Reflection)和漫反射(Diffuse Reflection),物體間作用用環境光(Ambient Light)表示Phong模型的實現:對物體表面上的每個點P,均需計算光線的反射方向。為了減少計算量,假設:光源在無窮遠處,L為常向量,視點在無窮遠處,V為常向量,(HN)近似(RV),H為L與V的平分向量,對所有的點總共只需計算一次H的值,節省了計算時間。示例:增量式光照明模型:在每個多邊形頂點處計算光照明強

16、度或參數,然后在各個多邊形內部進行雙線性插值,得到多邊形光滑均勻顏色分布。兩個主要算法:雙線性光強插值、Gouraud明暗處理;雙線性法向插值、Phong明暗處理。2. 局部光照明模型從光電學知識和物體微平面假設出發,介紹鏡面反射與物體材質有關的普遍局部光照明模型。局部光照明模型表示:物體表面反射光強,表示環境光的影響。最后一項是考慮了物體表面性質后的反射光強度量,是該局部光照明模型的復雜性與普遍性所在。簡單與局部模型比較:3. 紋理及紋理映射解決計算機生成真實感圖象缺乏現實物體表面細節的問題。紋理映射是把紋理圖象值映射到三維物體的表面的技術。紋理映射的問題:改變物體的屬性,可以產生紋理的效果,對簡單光照明模型而言,改變漫反射系數來改變物體的顏色;改變物體表面的法向量。映射方法:建立物體空間坐標(x,y,z)和紋理空間坐標(u,v)之間的對應關系,對物體表面進行參數化,反求出物體表面的

溫馨提示

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

評論

0/150

提交評論