




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄實(shí)驗(yàn)一:OpenGL基礎(chǔ)知識(shí)1實(shí)驗(yàn)二 OpenGL中的建模與變換2實(shí)驗(yàn)三 OpenGL中的光照5實(shí)驗(yàn)四 OpenGL中的拾取8實(shí)驗(yàn)五 OpenGL中的紋理映射1127實(shí)驗(yàn)一:OpenGL基礎(chǔ)知識(shí) 一、實(shí)驗(yàn)?zāi)康?#160;1、建立Windows系統(tǒng)下的OpenGL實(shí)驗(yàn)框架。 2、學(xué)習(xí)理解OpenGL工作流程。二、實(shí)驗(yàn)環(huán)境 硬件:每個(gè)學(xué)生需配備計(jì)算機(jī)一臺(tái)。 軟件:Visual C+; 三、實(shí)驗(yàn)內(nèi)容 1、建立非控制臺(tái)的Windows程序框架。 2、建立OpenGL框架。 3、建立OpenGL框架的類文件。 4、完善Windows框架。&
2、#160;5、理解程序間的相互關(guān)系。 四、實(shí)驗(yàn)要求1、學(xué)習(xí)教材第2章的內(nèi)容。2、理解教材中相關(guān)實(shí)例的代碼,按要求添加到適當(dāng)?shù)牡胤剑{(diào)試并通過運(yùn)行。3、運(yùn)行結(jié)果應(yīng)該與教材中的相關(guān)實(shí)例相符。4、編譯第2章的框架代碼,修改背景色、窗口標(biāo)題。五、程序設(shè)計(jì)提示(略)六、報(bào)告要求1認(rèn)真書寫實(shí)驗(yàn)報(bào)告,字跡清晰,格式規(guī)范。報(bào)告中應(yīng)寫清姓名、學(xué)號(hào)、實(shí)驗(yàn)日期、實(shí)驗(yàn)題目、實(shí)驗(yàn)?zāi)康摹?shí)驗(yàn)原理。2報(bào)告中應(yīng)書寫主要源程序,且源程序中要有注釋。3報(bào)告中應(yīng)包含運(yùn)行結(jié)果及結(jié)果分析。如調(diào)試通過并得到預(yù)期的效果,請(qǐng)注明通過并粘貼運(yùn)行效果圖;如未調(diào)試通過或結(jié)果不正確,試分析原因。4報(bào)告最后包含實(shí)驗(yàn)總結(jié)和體會(huì)。實(shí)驗(yàn)二 Ope
3、nGL中的建模與變換一、實(shí)驗(yàn)?zāi)康?學(xué)習(xí)配置OpenGL環(huán)境。2掌握在OpenGL中指定幾何模型的方法。3. 掌握OpenGL中的透視投影和正投影的設(shè)置方法,學(xué)會(huì)診斷投影問題導(dǎo)致的顯示異常。二、實(shí)驗(yàn)環(huán)境 硬件:每個(gè)學(xué)生需配備計(jì)算機(jī)一臺(tái)。 軟件:Visual C+; 三、實(shí)驗(yàn)內(nèi)容1建立OpenGL編程環(huán)境(注:Windows自帶gl和glu,還需要安裝glut庫(kù)文件。)(a)查看Windows自帶的OpenGL文件。在文件夾c:windowssystem32下查看是否存在文件opengl32.dll和glu32.dll;在Visual Studio的安裝目錄Vc7PlatformSDKInclud
4、egl下查看是否存在gl.h和glu.h;在Vc7PlatformSDKLib下是否存在opengl32.lib和glu32.lib。(b)安裝glut庫(kù)。將文件glut.h復(fù)制到Visual Studio的安裝目錄 Vc7PlatformSDKIncludegl下;將文件glut32.lib復(fù)制到Vc7PlatformSDKLib下;將文件glut32.dll復(fù)制到c:windowssystem32下。2OpenGL幾何建模(a)建立基本的幾何圖元,指定圖元的顏色,對(duì)圖元進(jìn)行平移、旋轉(zhuǎn)、縮放變換。基本幾何圖元包括:GL_LINES(線)、GL_LINE_STRIP(線帶)、GL_LINE_L
5、OOP(線環(huán))、GL_TRIANGLES(三角形)、GL_TRIANGLE_STRIP(三角形帶)、GL_TRIANGLE_FAN(三角形扇)、GL_QUADS(四邊形)、GL_QUAD_STRIP(四邊形帶)、GL_POLYGON(多邊形)。(b) 設(shè)置合適的投影參數(shù),分別用透視投影和正投影顯示步驟(a)中指定的幾何圖元。(c) 每按下鼠標(biāo)左鍵一次,模型向右旋轉(zhuǎn)一定角度。(d) 按下ESC鍵,退出程序。四、程序設(shè)計(jì)提示1. main函數(shù)功能:創(chuàng)建窗口;注冊(cè)回調(diào)函數(shù);主循環(huán)。int main(int argc, char* argv)glutInit(&argc, argv);glut
6、InitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100);glutCreateWindow(”O(jiān)penGL中的建模與變換”);init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMouseFunc(mouseFunc);glutMainLoop();return 0;2. 初始化函數(shù):功能:設(shè)置清除所用的顏色;指定著
7、色模型。void init(void) 3. 鍵盤響應(yīng)函數(shù):功能:按下ESC鍵時(shí)退出程序。void keyboard(unsigned char key, int x, int y)4. 鼠標(biāo)響應(yīng)函數(shù)功能:按下鼠標(biāo)左鍵時(shí),改變旋轉(zhuǎn)角度(或平移量、縮放系數(shù))。void mouseFunc(int button, int state, int x, int y)5. 顯示函數(shù):功能:指定幾何模型;指定顏色;進(jìn)行模型變換。void display(void)/清除顏色緩存/指定顏色/模型變換/指定模型/馬上執(zhí)行6. reshape函數(shù)功能:設(shè)置視口;窗口大小改變時(shí),改變視域體,使窗口的寬高比與視域體
8、的寬高比保持一致。void reshape (int w, int h)7. 包含頭文件,定義全局變量#include<stdlib.h>#include<GL/glut.h>GLdoubleangle = 0.0;GLdoubletranslation = 0.0;GLdoublescale = 1.0;五、思考題1在reshape函數(shù)中,窗口改變時(shí)如果不同時(shí)改變視域體的寬高比,會(huì)產(chǎn)生什么效果?2近裁剪面與物體相交時(shí),會(huì)產(chǎn)生什么效果?六、報(bào)告要求1認(rèn)真書寫實(shí)驗(yàn)報(bào)告,字跡清晰,格式規(guī)范。報(bào)告中應(yīng)寫清姓名、學(xué)號(hào)、實(shí)驗(yàn)日期、實(shí)驗(yàn)題目、實(shí)驗(yàn)?zāi)康摹?shí)驗(yàn)原理。2報(bào)告中應(yīng)書寫主要源
9、程序,且源程序中要有注釋。3報(bào)告中應(yīng)包含運(yùn)行結(jié)果及結(jié)果分析。如調(diào)試通過并得到預(yù)期的效果,請(qǐng)注明通過并粘貼運(yùn)行效果圖;如未調(diào)試通過或結(jié)果不正確,試分析原因。4報(bào)告最后包含實(shí)驗(yàn)總結(jié)和體會(huì)。實(shí)驗(yàn)三 OpenGL中的光照一、實(shí)驗(yàn)?zāi)康?理解光照模型。2掌握OpenGL中的光照編程方法。3. 學(xué)會(huì)診斷OpenGL中的光照效果異常。二、實(shí)驗(yàn)環(huán)境 硬件:每個(gè)學(xué)生需配備計(jì)算機(jī)一臺(tái)。 軟件:Windows操作系統(tǒng)+Visual C+; 三、實(shí)驗(yàn)內(nèi)容1建模 利用glut函數(shù)指定兩個(gè)球體模型,它們一左一右并列放置在原點(diǎn)兩側(cè),設(shè)置合適的視域體進(jìn)行觀察。2定義光源屬性定義兩個(gè)光源,分別設(shè)置它們的環(huán)境光、漫反射光和鏡面反射
10、光分量,設(shè)置兩個(gè)光源的位置分別位于左側(cè)球體的左前方和右側(cè)球體的右前方;左側(cè)的光源為紅色,右側(cè)的光源為綠色。3. 定義球體的材質(zhì)4. 顯示球體時(shí),讓左邊的光源只照亮左邊的球體,右邊的光源只照亮右邊的球體。5. 按下ESC鍵,退出程序。四、程序設(shè)計(jì)提示1. main函數(shù)功能:創(chuàng)建窗口;注冊(cè)回調(diào)函數(shù);主循環(huán)。int main(int argc, char* argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize (500, 500); glu
11、tInitWindowPosition (100, 100);glutCreateWindow (“OpenGL中的光照”);init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;2. 初始化函數(shù):功能:設(shè)置清除所用的顏色;指定著色模型;設(shè)置材質(zhì);初始化光源參數(shù);打開光照;打開深度測(cè)試。void init(void) 3. 鍵盤響應(yīng)函數(shù):功能:按下ESC鍵時(shí)退出程序。void keyboard(unsigned char key,
12、 int x, int y)4.顯示函數(shù):功能:指定幾何模型;指定顏色;進(jìn)行模型變換。void display(void)/清除顏色緩存/打開燈光0,關(guān)閉燈光1/向左平移/指定左側(cè)球體/打開燈光1,關(guān)閉燈光0/向右平移/指定右側(cè)球體/馬上執(zhí)行5. reshape函數(shù)功能:設(shè)置視口;窗口大小改變時(shí),改變視域體,使窗口的寬高比與視域體的寬高比保持一致。void reshape (int w, int h)6. 包含頭文件#include<stdlib.h>#include<GL/glut.h>五、思考題1若定義三個(gè)光源,光源0和光源1照在左側(cè)球體上,光源1和光源2照在右側(cè)球
13、體上,如何實(shí)現(xiàn)?2在OpenGL中,要使光照效果正常,需要指定模型的法向量。在本實(shí)驗(yàn)中利用glut函數(shù)顯示球體時(shí),沒有指定球體的法向量,你在實(shí)驗(yàn)中是否得到了正確的光照效果?請(qǐng)分析原因。六、報(bào)告要求1認(rèn)真書寫實(shí)驗(yàn)報(bào)告,字跡清晰,格式規(guī)范。報(bào)告中應(yīng)寫清姓名、學(xué)號(hào)、實(shí)驗(yàn)日期、實(shí)驗(yàn)題目、實(shí)驗(yàn)?zāi)康摹?shí)驗(yàn)原理。2報(bào)告中應(yīng)書寫主要源程序,且源程序中要有注釋。3報(bào)告中應(yīng)包含運(yùn)行結(jié)果及結(jié)果分析。如調(diào)試通過并得到預(yù)期的效果,請(qǐng)注明通過并粘貼運(yùn)行效果圖;如未調(diào)試通過或結(jié)果不正確,試分析原因。4報(bào)告最后包含實(shí)驗(yàn)總結(jié)和體會(huì)。實(shí)驗(yàn)四 OpenGL中的拾取一、實(shí)驗(yàn)?zāi)康?理解OpenGL中的交互式編程方法。2掌握OpenGL
14、中拾取的實(shí)現(xiàn)。二、實(shí)驗(yàn)環(huán)境 硬件:每個(gè)學(xué)生需配備計(jì)算機(jī)一臺(tái)。 軟件:Windows操作系統(tǒng)+Visual C+。 三、實(shí)驗(yàn)內(nèi)容1建模 利用glut函數(shù)定義兩個(gè)球體模型,它們一左一右并列放置在原點(diǎn)兩側(cè),設(shè)置合適的視域體進(jìn)行觀察。2拾取 將拾取函數(shù)作為鼠標(biāo)響應(yīng)的回調(diào)函數(shù)。在拾取函數(shù)中,建立拾取矩陣,在鼠標(biāo)附近3×3的區(qū)域內(nèi)選擇對(duì)象,在鼠標(biāo)左鍵按下時(shí),判斷哪一個(gè)球體被選中,還是都未被選中,并將選擇緩存中的內(nèi)容打印到屏幕上。3. 設(shè)置顏色左邊球體未被選中時(shí)顯示為紅色,右邊球體未被選中時(shí)顯示為綠色,當(dāng)其中任意一個(gè)被選中時(shí),則以白色顯示被選中的球體。4. 按下ESC鍵,退出程序。四、程序設(shè)計(jì)提示
15、1. main函數(shù)功能:創(chuàng)建窗口;注冊(cè)回調(diào)函數(shù);主循環(huán)。int main(int argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize (500, 500);glutInitWindowPosition (100, 100);glutCreateWindow(“OpenGL中的拾取”);init();glutReshapeFunc(reshape);glutDisplayFunc(display);glutMou
16、seFunc(pickRects);glutKeyboardFunc(keyboard);glutMainLoop();return 0; 2. 初始化函數(shù):功能:設(shè)置清除所用的顏色;打開深度測(cè)試;指定著色模型。void init(void) 3.鼠標(biāo)響應(yīng)函數(shù)功能:按下鼠標(biāo)左鍵時(shí),在鼠標(biāo)附近3×3的區(qū)域內(nèi)進(jìn)行拾取。如果選中左邊的球體則select = 1,如果選中右邊的球體則令select = 2,如果兩個(gè)球體都未被選中,則select = 0。void pickRects (int button, int state, int x, int y)4. 顯示函數(shù):功能:指定幾何模型;
17、指定顏色;如果當(dāng)前處于“選擇模式”,則設(shè)置合適的名稱棧。void display(void)5. reshape函數(shù)功能:設(shè)置視口;設(shè)置視域體。void reshape (int w, int h)6. 鍵盤響應(yīng)函數(shù)功能:按下ESC鍵時(shí)退出程序。void keyboard(unsigned char key, int x, int y)7. 包含頭文件,定義全局變量#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>Glint select = 0; 其中select用來標(biāo)記選中哪一個(gè)物體,選中左
18、邊的球體時(shí)select = 1,選中右邊的球體時(shí)select = 2,當(dāng)兩者都未被選中時(shí)select = 0。五、思考題1如果在拾取時(shí)有多個(gè)物體被選中,怎樣判斷哪個(gè)物體處于最上面?2一個(gè)命中記錄中的最小和最大深度值代表什么意義,怎樣取出它們的值?六、報(bào)告要求1認(rèn)真書寫實(shí)驗(yàn)報(bào)告,字跡清晰,格式規(guī)范。報(bào)告中應(yīng)寫清姓名、學(xué)號(hào)、實(shí)驗(yàn)日期、實(shí)驗(yàn)題目、實(shí)驗(yàn)?zāi)康摹?shí)驗(yàn)原理。2報(bào)告中應(yīng)書寫主要源程序,且源程序中要有注釋。3報(bào)告中應(yīng)包含運(yùn)行結(jié)果及結(jié)果分析。如調(diào)試通過并得到預(yù)期的效果,請(qǐng)注明通過并粘貼運(yùn)行效果圖;如未調(diào)試通過或結(jié)果不正確,試分析原因。4報(bào)告最后包含實(shí)驗(yàn)總結(jié)和體會(huì)。實(shí)驗(yàn)五 OpenGL中的紋理映射一
19、、實(shí)驗(yàn)?zāi)康?理解紋理映射的基本原理。2掌握OpenGL中定義紋理映射的方法。3. 學(xué)會(huì)診斷OpenGL中的紋理映射出現(xiàn)的異常。二、實(shí)驗(yàn)環(huán)境 硬件:每個(gè)學(xué)生需配備計(jì)算機(jī)一臺(tái)。 軟件:Windows操作系統(tǒng)+Visual C+; 三、實(shí)驗(yàn)內(nèi)容1構(gòu)造柵格圖像 建立一幅64×64像素的RGBA模式的圖像,將R、G、B、A四個(gè)分量的值保存在一個(gè)64×64×4的三維數(shù)組里,其中A為通道,圖像如圖1所示。 圖1 圖22建模利用glBegin(GL_QUADS)函數(shù)定義兩個(gè)矩形,一左一右放置,并設(shè)置合適的視域體進(jìn)行觀察。3. 將步驟1所生成的圖像作為紋理,映射到步驟2所定義的兩個(gè)
20、矩形上,指定合適的紋理坐標(biāo),使得左邊的矩形繪制得到的圖像與圖1一致,右邊的矩形繪制結(jié)果如圖2所示。 4. 按下ESC鍵,退出程序。四、程序設(shè)計(jì)提示1. main函數(shù)功能:創(chuàng)建窗口;注冊(cè)回調(diào)函數(shù);主循環(huán)。int main(int argc, char* argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("O
21、penGL中的紋理映射");init();glutReshapeFunc(reshape);glutDisplayFunc(display);glutKeyboardFunc (keyboard);glutMainLoop();return 0; 2. 初始化函數(shù):功能:設(shè)置清除所用的顏色;指定著色模型;打開深度測(cè)試;構(gòu)造柵格圖像;創(chuàng)建紋理;打開紋理映射。void init(void) 3. 鍵盤響應(yīng)函數(shù):功能:按下ESC鍵時(shí)退出程序。void keyboard(unsigned char key, int x, int y)4. 顯示函數(shù):功能:定義幾何模型;綁定紋理;指定紋理坐標(biāo)
22、和幾何坐標(biāo)。void display(void)/清除顏色緩存和深度緩存/綁定紋理/指定模型頂點(diǎn)的紋理坐標(biāo)和幾何坐標(biāo)/馬上執(zhí)行6. reshape函數(shù)功能:設(shè)置視口;窗口大小改變時(shí),改變視域體,使窗口的寬高比與視域體的寬高比保持一致。void reshape (int w, int h)7. 包含頭文件,定義全局變量#define ImageWidth 64#define ImageHeight 64static GLubyte ImageImageHeightImageWidth4;static GLuint texName;其中,ImageWidth為圖像寬度,ImageHeight 為圖
23、像高度,Image為圖像數(shù)據(jù),texName為紋理名稱。五、思考題如何給不同的物體映射不同的紋理圖像?六、報(bào)告要求1認(rèn)真書寫實(shí)驗(yàn)報(bào)告,字跡清晰,格式規(guī)范。報(bào)告中應(yīng)寫清姓名、學(xué)號(hào)、實(shí)驗(yàn)日期、實(shí)驗(yàn)題目、實(shí)驗(yàn)?zāi)康摹?shí)驗(yàn)原理。2報(bào)告中應(yīng)書寫主要源程序,且源程序中要有注釋。3報(bào)告中應(yīng)包含運(yùn)行結(jié)果及結(jié)果分析。如調(diào)試通過并得到預(yù)期的效果,請(qǐng)注明通過并粘貼運(yùn)行效果圖;如未調(diào)試通過或結(jié)果不正確,試分析原因。4報(bào)告最后包含實(shí)驗(yàn)總結(jié)和體會(huì)。實(shí)驗(yàn)2:代碼:#include<stdlib.h>#include<GL/glut.h>GLdoubleangle = 10.0;void display
24、()glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glBegin(GL_POLYGON);glVertex2d(-0.5,-0.5);glVertex2d(-0.5,0.5);glVertex2d(0.5,0.5);glVertex2d(0.5,-0.5);glEnd();glFlush();void mouseFunc(int button,int state,int x,int y)/旋轉(zhuǎn)if(state=GLUT_DOWN && button=GLUT_LEFT_BUTTON)glMatrixMode(GL
25、_MODELVIEW);glLoadIdentity();if(angle<360)angle+=10;elseangle-=360;glRotatef(angle,1,1,2);glutPostRedisplay();void keyboard(unsigned char key,int x,int y)if(key=27)exit(-1);void init()glClearColor(0.0,0.0,0.0,0.0);glColor3f(1.0,0.0,0.0);void reshape(int w,int h)glViewport(0,0,w,h);int main(int ar
26、gc,char *argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100);glutCreateWindow("OpenGL中的建模與變換");init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMouseFunc(mouseF
27、unc);glutMainLoop();return 0;截圖:點(diǎn)擊旋轉(zhuǎn):體會(huì):主要是我們?cè)谶M(jìn)行變換的時(shí)候,要注意glMatrixMode的設(shè)置,在進(jìn)行投影變換的時(shí)候要設(shè)置為GL_PROJECTION,而當(dāng)圖形變換的時(shí)候要設(shè)置為GL_MODELVIEW模式。實(shí)驗(yàn)3:代碼:#include<stdlib.h>#include<GL/glut.h>void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(1.0,1.0,1.0);glEnable(GL_LIGHT0);glDisable
28、(GL_LIGHT1);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(-0.5,0,0);glutSolidSphere(0.3,20,22);glLoadIdentity();glDisable(GL_LIGHT0);glEnable(GL_LIGHT1);glTranslatef(0.5,0,0);glutSolidSphere(0.3,20,22);glutSwapBuffers();void keyboard(unsigned char key,int x,int y)if(key=27)exit(-1);void i
29、nit()glClearColor(0.0,0.0,0.0,0.0);GLfloat position04=-10,10,-10,1;GLfloat ambient04=1,0,0,1;glLightfv(GL_LIGHT0,GL_POSITION,position0);glLightfv(GL_LIGHT0,GL_AMBIENT,ambient0);GLfloat position14=10,10,-10,1;GLfloat ambient14=0,1,0,1;glLightfv(GL_LIGHT1,GL_POSITION,position1);glLightfv(GL_LIGHT1,GL_
30、AMBIENT,ambient1);glEnable(GL_LIGHTING);glEnable(GL_DEPTH_TEST);void reshape(int w,int h)glViewport(0,0,w,h);int main(int argc,char *argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100);glutCreateWindow("Ope
31、nGL中的光照");init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;截圖:體會(huì):不知道為什么,右邊的球體好像沒有左邊的光線效果,這點(diǎn)查詢了很久還是不明白。實(shí)驗(yàn)4:#include <iostream>#include<stdlib.h>#include<GL/glut.h>using namespace std;GLint select = 0;void drawObjects(
32、GLenum mode)if(mode = GL_SELECT)/繪制紅色的小球glPushName(1);if(select=1)/判斷選中的是什么顏色的球,然后采用什么顏色紅球還是白色的球glColor3f(1,1,1);elseglColor3f(1,0,0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(-0.5,0,0);glutSolidSphere(0.3,20,22);glPopName();glLoadIdentity();if(mode = GL_SELECT) /繪制綠色的小球glPushName(2);
33、if(select=2)/判斷選中的是什么顏色的球,然后采用什么顏色繪制glColor3f(1,1,1);elseglColor3f(0,1,0);glTranslatef(0.5,0,0);glutSolidSphere(0.3,20,22);glPopName();select=0;/顯示完后將select設(shè)置為0void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);drawObjects(GL_RENDER);glutSwapBuffers();void keyboard(unsigned char key,int
34、x,int y)if(key=27)exit(-1);void init()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glClearColor(0.0,0.0,0.0,0.0);void reshape(int w,int h)glViewport(0,0,w,h);void draw(GLint hits,GLuint buffer)/這個(gè)是操作堆棧,判斷點(diǎn)擊的是什么顏色的球unsigned int i, j; GLuint name, *ptr; if(hits=0)cout<<"未點(diǎn)擊任何球體!"&l
35、t;<endl;elseptr = buffer;for(i=0;i<hits;i+)name=*ptr;ptr+=3;if(*ptr=1)cout<<"紅色球被點(diǎn)擊!"<<endl;select=1;elsecout<<"綠色球被點(diǎn)擊"<<endl;select=2;ptr+;drawObjects(GL_RENDER);/點(diǎn)擊完后設(shè)置球的顏色,重繪#define SIZE 512void pickRects(int button,int state,int x,int y)GLuint se
36、lectBufSIZE;GLint hits,viewport4;if(button=GLUT_LEFT_BUTTON && state=GLUT_DOWN)glGetIntegerv(GL_VIEWPORT,viewport);glSelectBuffer(SIZE,selectBuf);glRenderMode(GL_SELECT);glInitNames();glMatrixMode(GL_PROJECTION);glPushMatrix();glLoadIdentity();gluPickMatrix(GLdouble) x, (GLdouble) (viewport3
37、 - y),3.0, 3.0, viewport);drawObjects(GL_SELECT);/設(shè)置為選擇模式glMatrixMode(GL_PROJECTION);glPopMatrix();glFlush(); /繪制結(jié)束hits=glRenderMode(GL_RENDER);draw(hits,selectBuf);int main(int argc,char *argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glut
38、InitWindowPosition (100, 100);glutCreateWindow("OpenGL中的拾取");init ();glutDisplayFunc(display); glutMouseFunc(pickRects);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;截圖:初次顯示點(diǎn)擊紅球,然后點(diǎn)擊綠球,或是點(diǎn)擊黑色部分命令行顯示我們的操作體會(huì):這個(gè)拾取過程我們控制select用來顯示兩個(gè)的球的顯示顏色,特別注意顯示完之后要將其select=0;同時(shí)在
39、對(duì)堆棧進(jìn)行操作的時(shí)候要特別注意,不然就溢出啦。實(shí)驗(yàn)5:代碼:#include<stdlib.h>#include<GL/glut.h>#define ImageWidth 64#define ImageHeight 64static GLubyte ImageImageHeightImageWidth3;static GLuint texName;void makeImage()int i,j,c;for(i=0;i<ImageWidth;i+)for(j=0;j<ImageHeight;j+)if(i%16<8)if(j%16<8)c=225;
40、elsec=0;elseif(j%16<8)c=0;elsec=225; Imageij0=(GLubyte)c; Imageij1=(GLubyte)c; Imageij2=(GLubyte)c;void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(1.0,1.0,1.0); glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslated(-0.5,0,0); glBegin(GL_QUADS);/繪制四邊形 /定義兩個(gè)帶紋理的平面: /指定紋理坐標(biāo)和幾何坐標(biāo),每個(gè)紋理 /坐標(biāo)與其后的幾何坐標(biāo)對(duì)應(yīng)glTexCoord2d(0,0);glVertex2d(-0.4,-0.4);glTexCoord2d(1,0);glVertex2d(-0.4,0.4);glTexCoord2d(1,1);glVertex2d(0.4,0.4);glTexCoord2d(0,1);glVertex2d(0.4,-0.4); glEnd(); glLoadIdentity();glTran
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 西安交通大學(xué)《醫(yī)學(xué)免疫學(xué)與微生物學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 揭陽(yáng)職業(yè)技術(shù)學(xué)院《數(shù)字?jǐn)z像》2023-2024學(xué)年第一學(xué)期期末試卷
- 泉州紡織服裝職業(yè)學(xué)院《當(dāng)代哲學(xué)前沿》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東現(xiàn)代學(xué)院《西方文論》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京醫(yī)科大學(xué)《焊接檢測(cè)與控制技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安歐亞學(xué)院《科學(xué)研究導(dǎo)論及學(xué)術(shù)前沿進(jìn)展》2023-2024學(xué)年第二學(xué)期期末試卷
- 紹興文理學(xué)院元培學(xué)院《數(shù)學(xué)編程》2023-2024學(xué)年第二學(xué)期期末試卷
- 太陽(yáng)能購(gòu)銷安裝合同協(xié)議
- 天津房屋交易合同協(xié)議
- 天貓商城過戶合同協(xié)議
- 離職體檢免責(zé)協(xié)議書
- 光電工程師需掌握的常用計(jì)算試題及答案
- 大部分分校:地域文化形考任務(wù)一-國(guó)開(CQ)-國(guó)開期末復(fù)習(xí)資料
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- 小學(xué)五年級(jí)家長(zhǎng)會(huì)-主題班會(huì)
- 小學(xué)語(yǔ)文《習(xí)作一形形色色的人》說課稿附板書課件
- GB/T 3785.1-2023電聲學(xué)聲級(jí)計(jì)第1部分:規(guī)范
- 基夫賽特?zé)掋U的設(shè)計(jì)運(yùn)行(2)(1)
- 人教版新目標(biāo)英語(yǔ)八年級(jí)上冊(cè)u(píng)nit3教學(xué)設(shè)計(jì)
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評(píng)定規(guī)程
- DQE研發(fā)部項(xiàng)目文檔檢查清單
評(píng)論
0/150
提交評(píng)論