電子科大-計(jì)算機(jī)學(xué)院-三維圖形程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告-_第1頁
電子科大-計(jì)算機(jī)學(xué)院-三維圖形程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告-_第2頁
電子科大-計(jì)算機(jī)學(xué)院-三維圖形程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告-_第3頁
電子科大-計(jì)算機(jī)學(xué)院-三維圖形程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告-_第4頁
電子科大-計(jì)算機(jī)學(xué)院-三維圖形程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告-_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余11頁可下載查看

下載本文檔

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

文檔簡介

1、課程名稱:三維圖形程序設(shè)計(jì)學(xué)院:計(jì)算機(jī)科學(xué)與工程學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)指導(dǎo)教師:周川學(xué)生姓名:郫縣卡戴珊學(xué) 號:2014666666666實(shí)驗(yàn)成績:期:2016年3月31日電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心電子科技大學(xué)實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)一: 三維圖形程序上機(jī)操作訓(xùn)練與圖元編程二、實(shí)驗(yàn)室名稱: 主樓 A2412 實(shí)驗(yàn)時間: 2016年 3月31號三、實(shí)驗(yàn)?zāi)康模?. 掌握VC中OPenG三維編程環(huán)境的建立過程;2. 掌握GLUT編寫OPenG應(yīng)用程序的基本步驟,熟悉 GLUT基于事件驅(qū)動的編程模型;3. 掌握不同類型圖元的頂點(diǎn)裝配方式,并能夠利用圖元建立簡單的幾何對象。四、實(shí)驗(yàn)原理:OPe nGLS

2、程語言面向?qū)ο缶幊碳夹g(shù)五、實(shí)驗(yàn)內(nèi)容:(一)安裝、配置和測試 OPe nGL維編程環(huán)境1. 首先檢查 Windows操作系統(tǒng)中是否正確安裝了 ViSual StudiO集成開發(fā)環(huán)境:實(shí)驗(yàn) 要求在 Windows XP、 Visual C+ 2005 平臺以上;2. 解壓 OPenGL.ziP 到任意目錄下;3. 檢查OPenGL核心庫和實(shí)用庫及其頭文件是否安裝正確和完整:檢查VSINSTALLDIR%VCPlatformSDKlncludeGL目錄下是否存在 gl.h、glu.h 兩個頭文件, 并從解壓得到的GL子目錄下拷貝缺少的頭文件到該目錄下;檢查VSINSTALLDIR%VCPlatfor

3、mSDKLib目錄下是否存在 OPenGL32.lib、GLU32.lib 兩個庫 文件,并從解壓得到的 Lib 子目錄下拷貝缺少的 Lib 文件到該目錄下;4. 安裝GLUT庫及其頭文件。從解壓得到的GL子目錄下拷貝glut.h到%VSINSTALLDIR%VCPlatformSDKIncludeGL目錄中,從解壓得到的 Lib子目錄下拷貝 glut32.lib到VSINSTALLDIR%VCPlatformSDKLibT,拷貝 glut32.dll到 windir%system32 目錄下。5. 檢測OPenGL環(huán)境是否配置正確。a. 打開ViSUal StUdiO 集成開發(fā)環(huán)境,新建一個

4、類型為“ Win32控制臺應(yīng)用程序” 的空項(xiàng)目TeSt ;b. 在項(xiàng)目中新建一個C源文件Test.c ;c. 拷貝如下代碼到Test.c中;d. 生成TeSt項(xiàng)目,觀察“輸出”窗口中的編譯和鏈接輸出信息,若顯示類似“生 成:1已成功,0已失敗,0最新,0已跳過”表明項(xiàng)目生成成功,否則根據(jù)輸出信息檢查 程序或者OPenG編程環(huán)境是否設(shè)置正確,并在改正后重新生成 TeSt項(xiàng)目;e. 運(yùn)行Test.exe查看程序是否能夠正常啟動。/* Test.C */#i nclude <GLglut.h>void display();void ini t();int main (i nt argc,

5、 Char * argv)glutI nit(&argc, argv);glutCreateWindow( “SimPIe”);glutDisplay FUn c(display);in it();glutMa in Loop();void display()glClear(GL_COLOR_BUFFER_BIT);glBegi n(GL_POLYGON);glVertex2f(-0.5, -0.5);glVertex2f(-0.5, 0.5);glVertex2f(0.5, 0.5);glVertex2f(0.5, -0.5);(二) 編程任務(wù) 1:1. 分別利用點(diǎn)、線圖元生成錐形螺

6、旋曲線和環(huán)形螺旋曲線,要求可以設(shè)置點(diǎn)的大小、 線可以設(shè)置線形和寬度。錐形螺旋曲線的參數(shù)方程為:xa *t * cos(c *t)bya*t * sin( c *t)bz c *t環(huán)形螺旋曲線的參數(shù)方程為:x (a* sin(c* t) b) * cos(t)y (a* sin(c* t) b) * sin(t)z a* cos(c * t)其中,t為參數(shù)且t 0,2 。a, b和C是常數(shù),比如可取a=2.0 , b=3.0 , c=18.0。(三) 編程任務(wù) 2:1. 在窗口中繪制三角形和四邊形兩個簡單填充圖形, 要求它們能夠被鼠標(biāo)選中并隨鼠標(biāo) 一起拖動,此外能夠使用右鍵菜單分別設(shè)置兩個簡單圖

7、形的顏色。利用三角形圖元生成黑白相間的圓錐臺,要求通過鍵盤或鼠標(biāo)能夠改變圓錐臺地大端和 小端直徑。六、實(shí)驗(yàn)器材(設(shè)備、元器件) :機(jī)房電腦、MiCrOSOft ViSual StudiO 、OPenGLAPI函數(shù)庫七、實(shí)驗(yàn)步驟:1 :配置環(huán)境首先需要配置 OPenGL編程環(huán)境,在 MiCrOSOft ViSUaI StUdiO 2010 中添加相應(yīng) 的頭文件以及 lib 文件頭 文 件 添 加 地 址 為 C:PrOgram FileSMiCrOSOft ViSual StudiO 10.0VCinCludeGLlib 文件添加地址 C:PrOgram FileSMiCrOSOft ViSua

8、l StudiO 10.0VClib 并且將 glut.dll 添加到 SyStem.32 的文件夾里2:建立工程建立OPenG工程的過程選擇空項(xiàng)目;輸入名稱;選擇添加文件; 鍵入代碼;3:根據(jù)具體的題目要求進(jìn)行實(shí)驗(yàn)八、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:編程任務(wù)1:分別利用點(diǎn)、線圖元生成錐形螺旋曲線和環(huán)形螺旋曲線,要求可以設(shè)置點(diǎn)的大小、線 可以設(shè)置線形和寬度。錐形螺旋曲線的參數(shù)方程為:Xa * t * cos( c * t )bya * t * sin( c * t )bZ C * t環(huán)形螺旋曲線的參數(shù)方程為:X (a* Sin(c*t) b) * cos(t)y (a* Sin(c*t) b)*sin(t

9、)Z a* COS(c* t)其中,t為參數(shù)且t 0,2 。 a,b和C是常數(shù),比如可取a=2.0,b=3.0,c=18.0</* Test.C */#i nclude <GLglut.h>#in clude <math.h>#define Pl 3.1415void drawthelines()float t, x, y, z;float a=2, b=3, c=18; glColor3f(1.0, 0.5, 0.5); glBegin(GL_LINE_STRIP);for (t=0; t<=2*PI; t+=0.0002) x = a*t*cos(c*t

10、)+b;y = a*t*sin(c*t)+b;z = c*t;glVertex3f(x, y, z);glEnd();glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(12, 0, 0);glEnd();glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(0, 12, 0);glEnd();glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES); glVertex3

11、f(0, 0, 0); glVertex3f(0, 0, 12);glEnd();void display()glClear(GL_COLOR_BUFFER_BIT); drawthelines();glFlush();void init()glClearColor(0.0, 0.0, 0.0,0.0); glColor3f(1.0, 1.0, 1.0); gluLookAt(1, 1, 1,0, 0, 0,0, 1, O);glMatrixMode(GL_PROJECTION); glLoadlde ntity();glOrtho(-12.0, 12.0, -12.0, 12.0, -12,

12、 12); int main( int argc, Char * argv)glutl nit (&argc, argv);glut In itDisplayMode(GLUT_SINGLE|GLUT_RGB);glutl nitWin dowPositio n(0,0);glutCreateWindow( "Draw the lines" ); glutDisplayFu nc(display);in it();glutMai nLoop();return 0;實(shí)驗(yàn)一(2)iMl1 J » 6'3.¾3>M. T. E./* Te

13、st.C */#in elude <GLglut.h>#include <math.h> #define PI 3.1415void drawthelines()float t, x, y, z;float a=2, b=3, c=18; glColor3f(1.0, 0.5, 0.5);glBegin(GL_LINE_STRIP);for (t=0; t<=2*PI; t+=0.0002)x = (a*sin(c*t)+b)*cos(t); y = (a*sin(c*t)+b)*sin(t);z = a*cos(c*t); glVertex3f(x, y, z)

14、;glEnd();glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES);glVertex3f(0, 0, 0); glVertex3f(12, 0, 0);glEnd();glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES);glVertex3f(0, 0, 0); glVertex3f(0, 12, 0);glEnd();glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES);glVertex3f(0, 0, 0); glVertex3f(0, 0, 12);glEnd();void disp

15、lay() glClear(GL_COLOR_BUFFER_BIT); drawthelines();glFlush();void init()glClearColor(0.0, 0.0, 0.0,0.0); glColor3f(1.0, 1.0, 1.0);gluLookAt(1, 1, 1,0, 0, 0,0, 1, 0);glMatrixMode(GL_PROJECTION); glLoadIdentity();glOrtho(-12.0, 12.0, -12.0, 12.0, -12, 12); int main( int argc, char * argv)glutInit(&

16、;argc, argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(0,0);glutCreateWindow( "Draw the lines" );glutDisplayFunc(display);init();glutMainLoop();return 0;編程任務(wù) 2:1. 在窗口中繪制三角形和四邊形兩個簡單填充圖形, 要求它們能夠被鼠標(biāo)選中并隨鼠標(biāo) 一起拖動,此外能夠使用右鍵菜單分別設(shè)置兩個簡單圖形的顏色。#include <stdio.h>#include &l

17、t;GL/glut.h> #define SIZE 512int wide=600,height=600;GLint HITS;void init()glClearColor (1.0, 1.0, 1.0, 0.0);int Rect1_x1=-250,Rect1_y1=-250,Rect1_x2=450,Rect1_y2=450; int Rect2_x1=-500,Rect2_y1=-500,Rect2_x2=250,Rect2_y2=250;int movex1=0,movey1=0;int movex2=0,movey2=0;int mousex=0,mousey=0;int R

18、GB13=1.0,1.0,0.0;int RGB23=0.0,1.0,1.0;void drawObjects(GLenum mode, int flag)if (mode = GL_SELECT) glLoadName(1); glColor3f(RGB10,RGB11,RGB12); glTranslated(4*movex1,4*movey1,0); glRectf(Rect1_x1,Rect1_y1 ,Rect1_x2 ,Rect1_y2 ); glTranslated(-4*movex1,-4*movey1,0);if (mode = GL_SELECT) glLoadName(2)

19、; glColor3f(RGB20,RGB21,RGB22); glTranslated(4*movex2,4*movey2,0); glBegin(GL_TRIANGLES);glVertex2i(0,0);glVertex2i(145,245);glVertex2i(-45,280);glEnd();glTranslated(-4*movex2,-4*movey2,0);void display( int flag)glClear(GL_COLOR_BUFFER_BIT); drawObjects(GL_RENDER,flag);glFlush();void processHits (GL

20、int hits, GLuint buffer)unsigned int i, j;GLint ii, jj, names, *ptr;printf ("hits = %dn" , hits);ptr = (GLint *) buffer;for (i = 0; i < hits; i+) names = *ptr;ptr+=3;for (j = 0; j < names; j+) if (*ptr=1)printf ( "red rectanglen" ); elseprintf ( "blue rectanglen")

21、;ptr+;printf ( "n" );GLuint selectBufSIZE;void mouse( int button, int state, int x, int y) / 鼠標(biāo)函數(shù) GLint hits;GLint viewport4;if (button = GLUT_LEFT_BUTTON && state = GLUT_DOWN)mousex = x;mousey = y;glGetIntegerv (GL_VIEWPORT, viewport);glSelectBuffer (SIZE, selectBuf);glRenderMode(

22、GL_SELECT);glInitNames();glPushName(0);glMatrixMode (GL_PROJECTION);glPushMatrix ();glLoadIdentity ();gluPickMatrix (GLdouble) x, (GLdouble) (viewport3 - y),5.0, 5.0, viewport); gluOrtho2D (-2.0*wide, 2.0*wide, -2.0*height, 2.0*height);drawObjects(GL_SELECT,0);glMatrixMode (GL_PROJECTION); glPopMatr

23、ix ();glFlush ();hits = glRenderMode (GL_RENDER);HITS = hits;processHits (hits, selectBuf);glutPostRedisplay();void reshape( int w, int h)wide = w;height = h;glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity();gluOrtho2D (-2.0*wide, 2.0*wide, -2.0*height, 2.0*height); glMatrixMode(

24、GL_MODELVIEW);glLoadIdentity();void keyboard( unsigned char key, int x, int y)switch (key) case 27:exit(0);break ;void motion( int x, int y) / 建立移動函數(shù)if (HITS = 1 && selectBuf3 = 1 )movex1 = x-mousex+movex1;movey1 = mousey-y+movey1; display(1);else if (HITS = 1 && selectBuf3 = 2 )move

25、x2 = x-mousex+movex2;movey2 = mousey-y+movey2; display(2);else if (HITS = 2 )movex1 = x-mousex+movex1;movey1 = mousey-y+movey1;movex2 = x-mousex+movex2;movey2 = mousey-y+movey2; display(3);mousex = x;mousey = y;void subMenu1Func( int data) / 設(shè)置控制鍵盤鍵 switch (data)case 1:RGB10=1.0;RGB11=0.0;RGB12=0.0;

26、break ;case 2:RGB10=0.0;RGB11=1.0;RGB12=0.0;break ;case 3:RGB10=0.0;RGB11=0.0;RGB12=1.0;break ;display(0);void subMenu2Func( int data) / 設(shè)置控制鍵盤鍵switch (data)case 1:RGB20=1.0;RGB21=0.0;RGB22=0.0;break ;case 2:RGB20=0.0;RGB21=1.0;RGB22=0.0;break ;case 3:RGB20=0.0;RGB21=0.0;RGB22=1.0;break ;display(0);void MenuFunc(int data)int subMenu1,subMenu2,Menu;int main( int argc, char * argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (wide, height);glutInitWindowPosition (100, 100);glutCreateWindo

溫馨提示

  • 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

提交評論