opengl立方體的簡單三維交互式幾何變換實驗報告+代碼_第1頁
opengl立方體的簡單三維交互式幾何變換實驗報告+代碼_第2頁
opengl立方體的簡單三維交互式幾何變換實驗報告+代碼_第3頁
opengl立方體的簡單三維交互式幾何變換實驗報告+代碼_第4頁
opengl立方體的簡單三維交互式幾何變換實驗報告+代碼_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、立方體的簡單三維交互式幾何變換這個學期對 opengl 的學習,使我對計算機圖形學的一些算法過程 有了更多的了解。 因為對三維圖形的顯示比較感興趣, 就做了立方體 的簡單三維交互式幾何變換。功能:鍵盤的方向鍵實現立方體的上下左右平移;A鍵,S鍵分別實現向前,向后旋轉;J鍵,K鍵分別實現放大,縮小;C鍵退出。 程序模塊 :1.該模塊為繪制一個立方體。void DrawBox()glBegin(GL_QUADS);/ 前面glColor3f(1,0,0);glVertex3f(-1.0f, -1.0f, 1.0f);/ 四邊形的左下glVertex3f( 1.0f, -1.0f, 1.0f);/

2、四邊形的右下glVertex3f( 1.0f,1.0f,1.0f);/ 四邊形的右上glVertex3f(-1.0f,1.0f,1.0f);/ 四邊形的左上/ 后面glColor3f(0,1,0);glVertex3f(-1.0f, -1.0f, -1.0f);/ 四邊形的右下glVertex3f(-1.0f,1.0f, -1.0f);/ 四邊形的右上glVertex3f( 1.0f,1.0f, -1.0f);/ 四邊形的左上glVertex3f( 1.0f, -1.0f, -1.0f); / 四邊形的左下/ 頂面glColor3f(0,0,1);glVertex3f(-1.0f,glVert

3、ex3f(-1.0f,glVertex3f( 1.0f,glVertex3f( 1.0f,1.0f, -1.0f);1.0f, 1.0f);1.0f, 1.0f);1.0f, -1.0f);/ 底面glColor3f(1,1,0);glVertex3f(-1.0f, -1.0f, -1.0f);/ 四邊形的左上/ 四邊形的左下 / 四邊形的右下 / 四邊形的右上四邊形的右上glVertex3f( 1.0f, -1.0f, -1.0f); / 四邊形的左上 glVertex3f( 1.0f, -1.0f, 1.0f); / 四邊形的左下 glVertex3f(-1.0f, -1.0f, 1.0f

4、); / 四邊形的右下/ 右面glColor3f(0,1,1);glVertex3f( 1.0f, -1.0f, -1.0f); / 四邊形的右下 glVertex3f( 1.0f, 1.0f, -1.0f); / 四邊形的右上 glVertex3f( 1.0f, 1.0f, 1.0f); / 四邊形的左上 glVertex3f( 1.0f, -1.0f, 1.0f); / 四邊形的左下/ 左面glColor3f(1,0,1);glVertex3f(-1.0f, -1.0f, -1.0f); / 四邊形的左下glVertex3f(-1.0f, -1.0f, 1.0f);/ 四邊形的右下glVe

5、rtex3f(-1.0f, 1.0f, 1.0f); / 四邊形的右上 glVertex3f(-1.0f, 1.0f, -1.0f);/ 四邊形的左上glEnd(); 2該模塊設置屏幕顏色和深度緩存,設置立方體的平移,縮放,旋 轉變換。void display() glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);/ 清空顏色和深度緩存glMatrixMode(GL_MODELVIEW);glLoadIdentity();/gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);gITra n

6、slatef(0.0f+tx,0.0f+ty,-4.0f); 平移變換glScalef(1+sf,1+sf,1+sf); /縮放變換gIRotatef(ratX, 1.0f, O.Of, O.Of);/繞 X 軸的旋轉變換glRotatef(ratY, O.Of, 1.0f, O.Of);/繞 Y 軸的旋轉變換glRotatef(ratZ, O.Of, O.Of, 1.0f);/繞 Z 軸的旋轉變換DrawBox();glFlush();glutSwapBuffers();該模塊為重繪回調函數,在窗口首次創立或用戶改變窗口尺寸時被 調用。void reshape(int w, int h)gl

7、Viewport(0, 0, w, h);/ 指定視口的位置和大小 glMatrixMode(GL_PROJECTION);glLoadIdentity();/glFrustum(-1.0, 1.0, -1.0, 1.0, 3.1, 10.0);/gluPerspective(45,1,0.1,10.0);glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0);該模塊為設置深度緩存和啟動深度測試模式。void init()glClearColor (1.0, 1.0, 1.0, 1.0);glEnable(GL_DEPTH_TEST); / 啟動深度測試模式該模塊為設

8、置鍵盤的交互式操作。void myKeyboard(unsigned char key, int x, int y)if(key = a | key = A) ratX += 2;ratY += 2;ratZ += 2;if(key = s | key = S)ratX -= 2;ratY -= 2;ratZ -= 2;if(key = j | key = J)sf+=0.1;if(key = k | key = K)sf-=0.1;if(key = c | key = C)exit(0);glutPostRedisplay(); /重新調用繪制函數該模塊為設置鍵盤方向鍵的交互式操作。 voi

9、d myspecialKeyboard(int key,int x,int y) if(key = GLUT_KEY_UP )ty+=0.1;if(key = GLUT_KEY_DOWN)ty-=0.1;if(key =GLUT_KEY_LEFT)tx-=0.1;if(key=GLUT_KEY_RIGHT)tx+=0.1;glutPostRedisplay();主函數模塊,實現設置顯示模式窗口大小,位置 ,調用函數操作。int main(int argc, char* argv)glutInit(&argc,argv); / 初始 GLUT.glutInitDisplayMode (GLUT_

10、DEPTH |GLUT_DOUBLE |GLUT_RGB); / 設定顯示模式glutInitWindowSize(400,400); / 設定窗口大小glutInitWindowPosition(50,100); / 設定窗口位置glutCreateWi ndow(立方體的簡單三維交互式幾何變換”);/用前面指定參數創立glutReshapeFunc(reshape); 指/ 定重繪回調函數 glutDisplayFunc(display); / 進展一些初始化工作 glutKeyboardFunc( myKeyboard); / 指定鍵盤回調函數 glutSpecialFunc(myspe

11、cialKeyboard); 指/ 定鍵盤回調函數init();glutMainLoop();/ 進入無窮循環,等待事件處理功能截圖: 立方體的平移: 上平移 下平移: 左平移: 右平移: 放大: 縮小: 旋轉: 源程序: *include *include *include float ratX = 60; float ratY = 60; float ratZ = 60; float tx=0; float ty=0; float sf=0;void DrawBox()glBegin(GL_QUADS);/ 前面glColor3f(1,0,0);/ 四邊形的左下/ 四邊形的右下/ 四邊形的

12、右上/ 四邊形的左上 四邊形的右下/ 四邊形的右上/ 四邊形的左上四邊形的左下/ 四邊形的左上/ 四邊形的左下/ 四邊形的右下/ 四邊形的右上/ 四邊形的右上glVertex3f(-1.0f, -1.0f, 1.0f);glVertex3f( 1.0f, -1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);/ 后面glColor3f(0,1,0);glVertex3f(-1.0f, -1.0f, -1.0f); / glVertex3f(-1.0f, 1.0f, -1.0f); glVertex3

13、f( 1.0f, 1.0f, -1.0f);glVertex3f( 1.0f, -1.0f, -1.0f); / 頂面glColor3f(0,0,1); glVertex3f(-1.0f, glVertex3f(-1.0f, glVertex3f( 1.0f, glVertex3f( 1.0f,/ 底面glColor3f(1,1,0);1.0f, -1.0f);1.0f, 1.0f);1.0f, 1.0f);1.0f, -1.0f);glVertex3f(-1.0f, -1.0f, -1.0f);glVertex3f( 1.0f, -1.0f, -1.0f); / 四邊形的左上 glVerte

14、x3f( 1.0f, -1.0f, 1.0f); / 四邊形的左下glVertex3f(-1.0f, -1.0f, 1.0f); / 四邊形的右下/ 右面glColor3f(0,1,1);glVertex3f( 1.0f, -1.0f, -1.0f); / 四邊形的右下glVertex3f( 1.0f, 1.0f, -1.0f); / 四邊形的右上 glVertex3f( 1.0f, 1.0f, 1.0f); / 四邊形的左上 glVertex3f( 1.0f, -1.0f, 1.0f); / 四邊形的左下/ 左面glColor3f(1,0,1);glVertex3f(-1.0f, -1.0f

15、, -1.0f); / 四邊形的左下glVertex3f(-1.0f, -1.0f, 1.0f); / 四邊形的右下 glVertex3f(-1.0f, 1.0f, 1.0f); / 四邊形的右上 glVertex3f(-1.0f, 1.0f, -1.0f); / 四邊形的左上 glEnd();void display() glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);/ 清空顏色和深度緩存glMatrixMode(GL_MODELVIEW);glLoadIdentity();/gluLookAt(2.0, 2.0, 2.0, 0.0, 0.

16、0, 0.0, 0.0, 1.0, 0.0);gITra nslatef(0.0f+tx,0.0f+ty,-4.0f); 平移變換 glScalef(1+sf,1+sf,1+sf); /縮放變換gIRotatef(ratX, 1.0f, O.Of, O.Of);/繞 X 軸的旋轉變換glRotatef(ratY, O.Of, 1.0f, O.Of);/繞 Y 軸的旋轉變換glRotatef(ratZ, O.Of, O.Of, 1.0f);/繞 Z 軸的旋轉變換DrawBox();glFlush();glutSwapBuffers();void reshape(int w, int h) /重繪

17、回調函數, 在窗口首次創立或用戶改變 窗口尺寸時被調用glViewport(0, 0, w, h);/ 指定視口的位置和大小glMatrixMode(GL_PROJECTION);glLoadIdentity();/glFrustum(-1.0, 1.0, -1.0, 1.0, 3.1, 10.0);/gluPerspective(45,1,0.1,10.0);glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0);void init()glClearColor (1.0, 1.0, 1.0, 1.0);glEnable(GL_DEPTH_TEST); / 啟動深度測

18、試模式 void myKeyboard(unsigned char key, int x, int y)if(key = a | key = A)ratX += 2;ratY += 2;ratZ += 2;if(key = s | key = S) ratX -= 2; ratY -= 2; ratZ -= 2;if(key = j | key = J) sf+=0.1;if(key = k | key = K) sf-=0.1;if(key = c | key = C)exit(0);glutPostRedisplay(); /重新調用繪制函數void myspecialKeyboard(int key,in

溫馨提示

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

評論

0/150

提交評論