華北電力大學(xué)計(jì)算機(jī)圖形學(xué)(共13頁)_第1頁
華北電力大學(xué)計(jì)算機(jī)圖形學(xué)(共13頁)_第2頁
華北電力大學(xué)計(jì)算機(jī)圖形學(xué)(共13頁)_第3頁
華北電力大學(xué)計(jì)算機(jī)圖形學(xué)(共13頁)_第4頁
華北電力大學(xué)計(jì)算機(jī)圖形學(xué)(共13頁)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上華北電力大學(xué)實(shí) 驗(yàn) 報(bào) 告| 實(shí)驗(yàn)名稱 基于OpenGL的綜合實(shí)驗(yàn) 課程名稱 計(jì)算機(jī)圖形學(xué) | 專業(yè)班級: 學(xué)生姓名: 學(xué) 號: 成 績:指導(dǎo)教師:姜麗梅 實(shí)驗(yàn)日期:2013年5月 專心-專注-專業(yè)實(shí)驗(yàn)一:OpenGL基本圖元繪制實(shí)驗(yàn)1、 實(shí)驗(yàn)?zāi)康?了解OpenGL圖形軟件包繪制圖形的基本過程及其程序框架,本實(shí)驗(yàn)要求熟悉OpenGL基本圖元函數(shù)的使用。通過使用OpenGL及GLUT庫在Visual C+環(huán)境下編寫圖形繪制程序掌握圖形繪制的一般框架,從而為進(jìn)一步做綜合性的圖形繪制實(shí)驗(yàn)奠定基礎(chǔ)。2、 實(shí)驗(yàn)要求在兩個具有不同屬性的窗口中分別顯示一個旋轉(zhuǎn)的三角形來演示單緩存和

2、雙緩存,在旋轉(zhuǎn)過程中不斷改變圖形的顏色,利用鼠標(biāo)或菜單可終止/啟動圖形旋轉(zhuǎn)。3、 實(shí)驗(yàn)內(nèi)容程序包括哪些函數(shù),各個函數(shù)的功能以及整個流程。 理解glut程序框架,理解窗口到視區(qū)的變換 ,理解OpenGL實(shí)現(xiàn)動畫的原理。4、 實(shí)驗(yàn)過程與結(jié)果分析 1、 OpenGL 繪圖工具箱1) 清理屏幕;2) 屬性說明;3) 指定坐標(biāo)系;4) 定義幾何圖元;5) 定義視點(diǎn);6) 說明視口;7) 繪制物體;8) 結(jié)束運(yùn)行。 2. OpenGL繪制流程 3、 實(shí)驗(yàn)方法與步驟 1、正確配置相關(guān)文件;對于Microsoft Visual Studio 2010 把 glut.h 放入 1. C:Program File

3、sMicrosoft SDKsWindowsv7.0AIncludegl 文件目錄下把 glut.lib 放入 2. C:Program FilesMicrosoft SDKsWindowsv7.0ALib文件目錄下把 glut32.dll 放入 3. C:WindowsSysWOW64文件目錄下 2、使用Win32 Console Application創(chuàng)建新項(xiàng)目; 3、編輯源程序并進(jìn)行調(diào)試; 4、進(jìn)行運(yùn)行測試,并結(jié)合情況進(jìn)行調(diào)整;通過改變各個函數(shù)參數(shù)值,觀察圖形變化,說明產(chǎn)生相應(yīng)結(jié)果的原因,從而進(jìn)一步了解函數(shù)的作用。 5、對運(yùn)行結(jié)果進(jìn)行保存; 4、實(shí)驗(yàn)運(yùn)行截圖: 當(dāng)旋轉(zhuǎn)的三角形停在不同的顏

4、色變換的時候?qū)嶒?yàn)代碼:#include <GL/glut.h>#include<Windows.h>#include <math.h>#define DEG_TO_RAD 0.static GLfloat theta = 0.0;bool Flag=true;GLfloat rtri; float x=0.0;void display(void) glClear(GL_COLOR_BUFFER_BIT); glColor3f(cos(x), sin(x), 0.0); glBegin(GL_POLYGON); glVertex2f(cos(DEG_TO_RA

5、D*theta), sin(DEG_TO_RAD*theta);glVertex2f(cos(DEG_TO_RAD*(theta+120), sin(DEG_TO_RAD*(theta+120);glVertex2f(cos(DEG_TO_RAD*(theta+240), sin(DEG_TO_RAD*(theta+240); glEnd(); glFlush();void spinDisplay (void) theta = theta + 1.0;x+; if (theta > 360.0)theta = theta - 360.0; glutPostRedisplay(); /標(biāo)記

6、當(dāng)前窗口需要重新繪制 void myReshape(int w, int h) glViewport(0, 0, w, h);/指定平面上一個矩形裁剪區(qū)域, glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) gluOrtho2D(-1., 1., -1.*(GLfloat)h/(GLfloat)w, 1.*(GLfloat)h/(GLfloat)w); else gluOrtho2D(-1.*(GLfloat)w/(GLfloat)h, 1.*(GLfloat)w/(GLfloat)h, -1., 1.);void my

7、Mouse(int button ,int state ,int x ,int y)if(Flag=true)if(button=GLUT_LEFT_BUTTON)Flag=false;Sleep(1000);else return ;else if(Flag=false)Flag=true; return ;void main(int argc, char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(100, 100);glutInitWin

8、dowSize(500, 500);glutCreateWindow("spinning square"); glClearColor(0.0, 0.0, 0.0, 1.0);glutMouseFunc(myMouse);glutDisplayFunc(display); glutReshapeFunc(myReshape); glutIdleFunc(spinDisplay); glutMainLoop(); 實(shí)驗(yàn)二:OpenGL三維觀察綜合實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?了解OpenGL圖形軟件包繪制圖形的基本過程及其程序框架,本實(shí)驗(yàn)要求對繪制的簡單場景(可以自己擬定)綜合利用幾何變

9、換或gluLookAt函數(shù)實(shí)現(xiàn)交互式三維觀察程序,從而通過本實(shí)驗(yàn)加深理解計(jì)算機(jī)圖形學(xué)中的三維圖形繪制流程的工作原理。二、實(shí)驗(yàn)要求對于繪制的立方體(也可以自己擬定)通過鍵盤移動視點(diǎn),利用鼠標(biāo)或鍵盤控制立方體的旋轉(zhuǎn)方向,從不同角度觀察各面顏色不同的立方體。三、實(shí)驗(yàn)內(nèi)容程序包括哪些函數(shù),各個函數(shù)的功能以及整個流程。 理解glut程序框架,理解窗口到視區(qū)的變換 ,理解OpenGL實(shí)現(xiàn)動畫的原理。4、 實(shí)驗(yàn)過程與結(jié)果分析 1、實(shí)驗(yàn)分析 通過改變glOtho2D的參數(shù)來得到正確的圖形。 這個函數(shù)描述了一個平行修剪空間。這種投影意味著理觀察者較遠(yuǎn)的對象看上去不會變小。它創(chuàng)建了一個平行視景體,實(shí)際上這個函數(shù)的

10、操作是創(chuàng)建了一個正射投影矩陣。其中近裁剪平面是一個矩陣,矩陣左下角點(diǎn)的三維空間坐標(biāo)是(left,bottom,near)。 對繪制的三維場景綜合利用幾何變換或gluLookAt函數(shù)實(shí)現(xiàn)交互式三維觀察。 實(shí)驗(yàn)運(yùn)行結(jié)果截圖:通過按不同的鼠標(biāo)鍵讓圖形從不同的方向旋轉(zhuǎn)通過按不同的鍵盤的鍵讓圖形從不同的方向旋轉(zhuǎn)而且改變大小 結(jié)果分析glLookAt()函數(shù)定義了視點(diǎn)矩陣,并用該矩陣乘以當(dāng)前矩陣。 viewer0,viewer1,viewer2定義了視點(diǎn)的位置,centerx centery centerz變量指定了參考點(diǎn)的位置,該點(diǎn)通常為相機(jī)所瞄準(zhǔn)的場景中心軸線上的點(diǎn)。視點(diǎn)轉(zhuǎn)換操作在模型轉(zhuǎn)換操作之后發(fā)出

11、,以便模型轉(zhuǎn)換先對物體發(fā)生作用。場景中物體的頂點(diǎn)經(jīng)過模型轉(zhuǎn)換移動到所希望的位置,然后再對場景進(jìn)行視點(diǎn)定位等操作。模型轉(zhuǎn)換和視點(diǎn)轉(zhuǎn)換共同構(gòu)成模型視景矩陣。實(shí)驗(yàn)代碼:#include <stdlib.h>#include <GL/glut.h>GLfloat vertices3 = -1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0, -1.0,1.0,-1.0, -1.0,-1.0,1.0, 1.0,-1.0,1.0, 1.0,1.0,1.0, -1.0,1.0,1.0;GLfloat normals3 = -1.0,-1.0,-1.0,1

12、.0,-1.0,-1.0,1.0,1.0,-1.0, -1.0,1.0,-1.0, -1.0,-1.0,1.0, 1.0,-1.0,1.0, 1.0,1.0,1.0, -1.0,1.0,1.0;GLfloat colors3 = 0.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0, 0.0,1.0,0.0, 0.0,0.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0, 0.0,1.0,1.0;void polygon(int a, int b, int c , int d)glBegin(GL_POLYGON);glColor3fv(colorsa);glN

13、ormal3fv(normalsa);glVertex3fv(verticesa);glColor3fv(colorsb);glNormal3fv(normalsb);glVertex3fv(verticesb);glColor3fv(colorsc);glNormal3fv(normalsc);glVertex3fv(verticesc);glColor3fv(colorsd);glNormal3fv(normalsd);glVertex3fv(verticesd);glEnd();void colorcube()polygon(0,3,2,1);polygon(2,3,7,6);polyg

14、on(0,4,7,3);polygon(1,2,6,5);polygon(4,5,6,7);polygon(0,1,5,4);static GLfloat theta = 0.0,0.0,0.0;static GLint axis = 2;static GLdouble viewer= 0.0, 0.0, 5.0; /* initial viewer location */ void display(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/* Update viewer position in modelview ma

15、trix */glLoadIdentity();gluLookAt(viewer0,viewer1,viewer2, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);/* rotate cube */glRotatef(theta0, 1.0, 0.0, 0.0);glRotatef(theta1, 0.0, 1.0, 0.0);glRotatef(theta2, 0.0, 0.0, 1.0); colorcube(); glFlush();glutSwapBuffers();void mouse(int btn, int state, int x, int y)if(btn=GL

16、UT_LEFT_BUTTON && state = GLUT_DOWN) axis = 0;if(btn=GLUT_MIDDLE_BUTTON && state = GLUT_DOWN) axis = 1;if(btn=GLUT_RIGHT_BUTTON && state = GLUT_DOWN) axis = 2;thetaaxis += 2.0;if( thetaaxis > 360.0 ) thetaaxis -= 360.0;display();void keys(unsigned char key, int x, int y)/*

17、 Use x, X, y, Y, z, and Z keys to move viewer */ if(key = 'x') viewer0-= 1.0; if(key = 'X') viewer0+= 1.0; if(key = 'y') viewer1-= 1.0; if(key = 'Y') viewer1+= 1.0; if(key = 'z') viewer2-= 1.0; if(key = 'Z') viewer2+= 1.0; display();void myReshape(int

18、w, int h) glViewport(0, 0, w, h);/* Use a perspective view */ glMatrixMode(GL_PROJECTION); glLoadIdentity();if(w<=h) glFrustum(-2.0, 2.0, -2.0 * (GLfloat) h/ (GLfloat) w, 2.0* (GLfloat) h / (GLfloat) w, 2.0, 20.0);else glFrustum(-2.0, 2.0, -2.0 * (GLfloat) w/ (GLfloat) h, 2.0* (GLfloat) w / (GLfloat) h, 2.0, 20.0);/* Or we can use gluPerspective */ /* gluPerspective(45.0, w/h, -10.0, 10.0); */ glMatrixMode(GL_MODELVIEW);voidmain(int argc, char *argv) glutInit(&argc, argv); glutInitDispl

溫馨提示

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

評論

0/150

提交評論