第二次實驗三維顯示_第1頁
第二次實驗三維顯示_第2頁
第二次實驗三維顯示_第3頁
全文預覽已結束

下載本文檔

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

文檔簡介

1、第二次實驗:三維顯示實驗內容: 從提供兩個文件中讀取頂點信息與三角網格信息, 繪制出來, 同時完成交互的功 能。具體要求如下:(1) 從文件中讀取頂點信息與三角網格信息(2) 將所有信息繪制到 (-2,-2,-1)-(2,2,1) 的區(qū)域,投影模式自己設定(3) 繪制時可選擇線繪制(4) 繪制時可選擇填充繪制,填充繪制時顏色過渡要平滑(5) 實現(xiàn)旋轉功能,縮放功能,用鼠標左鍵或者鍵盤控制(6) 繪制時可選擇自定義填充模式 1,顯示為線型,用戶選擇預定義的顏色,對鼠標左鍵點 擊到的網格進行填充(7) 繪制時可選擇自定義填充模式 2,顯示為線型,用戶選擇預定義的顏色,對鼠標左鍵選 擇的區(qū)域內的三角

2、網格進行填充(8) 繪制時可選擇紋理填充,將所給的紋理圖像填充到顯示圖形上(9) 繪制時可選擇顯示坐標軸,可選擇恢復為初始狀態(tài)(10) 上邊的選擇使用 OpenGL菜單附:1.兩個文件分別是 point.txt 和 triangle.txt ,其中, point.txt 記錄了點的坐標, triangle.txt 記錄 了三角網格的頂點的索引號,兩個文件的格式如下:Point.txtN / 總點數X1 y1 z1 /第一個點的坐標Xn yn zn / 第 n 個點的坐標Triangle.txtM / 總三角網格數P11 p12 p13 / 第一個三角網格的頂點索引,以 point.txt 中點

3、的排列為依據,從 0 開始Pm1 pm2 pm3 /第 m 個三角網格的頂點索引 可能用到的函數: 三維觀察函數 (觀察 &投影): P316-320 拾取函數 : P550-554 菜單函數 : P555-560顯示字符 : glRasterPos*指定位置, glutBitmapCharacter(font,char) 顯示字符 投影&反投影 :gluProject(double x,double y,double z,double *modelmatrix,double *projectmatrix,int *viewport,double *winx,double *w

4、iny,double *winz)計算空間的點 (x,y,z)在屏幕上的位置 (winx,winy,winz)gluUnProject(double winx,double winy,double winz, double *modelmatrix,double *projectmatrix,int *viewport,double *objx,double *objy,double *objz) 計算屏幕上的點 (winx,winy,winz) 在空間中的位置 (objx,objy,objz) gluProject 中得到的 winz ,離屏幕越近,值越大。獲取矩陣 :glGetDouble

5、v(mode,double *matrix) , mode 可 選 擇 GL_PROJECTION_MATRIX 或 GL_MODELVIEW_MATRIX,分別得到投影矩陣和模型矩陣glGetIntegerv(mode,int *matrix) , mode 可選擇 GL_VIEWPORT,得到視口矩陣 上邊得到的矩陣可以用于計算投影&反投影。紋理函數 : P520-521加載紋理可以通過 glaux 來使用:_AUX_RGBImageRec *auImage = auxDIBImageLoadA("texture.bmp"); gluBuild2DMipmaps

6、(GL_TEXTURE_2D,3,auImage->sizeX,auImage->size,YGL_RGB,GL_UNSIGNED_ BYTE,auImage->data);delete auImage;子窗口 :創(chuàng)建子窗口 :iSubWinID = glutCreateSubWindow ( iMainWinID ,x,y,width,height);其中 ,iMainWinID 是母窗口的 ID,可由 iMainWinID = glutCreateWindow ( "Demo2"); 獲得 每個窗口有獨立的狀態(tài) , 在設置狀態(tài)時 , 可以用 glutS

7、etWindow ( iSubWinID ); 設置為當前窗口 , 然后設置 . 創(chuàng) 建完窗口時 , 當前窗口會自動設定為剛創(chuàng)建好的窗口 .鼠標移動函數 : glutPassiveMotionFunc(func); 鼠標移動時自動調用 func(int cx,int cy) glutMotionFunc(func); 鼠標有按鍵觸發(fā)狀態(tài)并移動時自動調用 func(int cx,int cy) 關于旋轉 :三維旋轉時可以采用以下方法 :由屏幕位置獲取三維坐標 , 共兩個坐標 , 形成兩個由原點發(fā)出的向量 .利用向量叉乘的方法可以得到旋轉軸 , 得用向量點乘可以計算得到兩向量的夾角 . 根據旋轉軸

8、及夾角對旋轉的參數進行調整 .關于顏色平滑過渡 :顏色根據 Z 值的數值大小 , 從(0,0,1) (0,1,1) (0,1,0) (1,1,0) (1,0,0) 可以實現(xiàn) Demo中的顏色平 滑.其余:/ 設置及載入紋理GLuint uiTexture ; / 紋理glPixelStorei ( GL_UNPACK_ALIGNME,1N);TglGenTextures (1,& uiTexture );glBindTexture ( GL_TEXTURE_2, DuiTexture );_AUX_RGBImageR e*cauImage = auxDIBImageLoadA( &qu

9、ot;texture.bmp" );if (! auImage)return false ;gluBuild2DMipmaps ( GL_TEXTURE_,23D, auImage->sizeX , auImage->sizeY , GL_RG,BGL_UNSIGNED_BY,TaEuImage->data ); delete auImage;主函數 :int main( int argc , char * argv )glutInit (&argc , argv );glutInitDisplayMode ( GLUT_DOUB L| E GLUT_RG)

10、;B glutInitWindowSize ( iWinWidth , iWinHeight );/ 主窗口信息iMainWinID = glutCreateWindow ( "Demo2"); if (! MyInit ()/ 自定義 OpenGL初始化函數return 1;glutDisplayFunc ( MyDisplay );/ 顯示glutReshapeFunc ( MyReshape);/ 窗口改變glutMouseFunc( MyMous)e;/ 鼠標點擊glutMotionFunc ( MyMotion);/ 鼠標移動/ 子窗口信息iSubWinID =

11、glutCreateSubWindow ( iMainWinID ,0, iWinHeight * 3 / 4, iWinWidth / 4, iWinHeight / 4); MySubInit (); / 子窗口自定義初始化函數glutDisplayFunc ( MySubDisplay); / 子窗口顯示回調函數glutMouseFunc( MySubMous)e; / 子窗口鼠標點擊函數glutPassiveMotionFunc ( MySubMotion); / 子窗口鼠標移動函數glutMainLoop ();return 0;窗口改變函數 :void MyReshape( GLint cx , GLint cy) / 窗口變化函數 iWinWidth = cx; iWinHeight = cy;/ 修改主窗口相關狀態(tài) glutSetWindow ( iMainWinID );glViewport (0,0, iWinWidth , iWinHeight );/ 修

溫馨提示

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

評論

0/150

提交評論