地學(xué)可視化與景觀擬實(shí)驗(yàn)報(bào)告_第1頁
地學(xué)可視化與景觀擬實(shí)驗(yàn)報(bào)告_第2頁
地學(xué)可視化與景觀擬實(shí)驗(yàn)報(bào)告_第3頁
地學(xué)可視化與景觀擬實(shí)驗(yàn)報(bào)告_第4頁
地學(xué)可視化與景觀擬實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

地學(xué)可視化與景觀擬實(shí)驗(yàn)報(bào)告1、實(shí)驗(yàn)內(nèi)容首先利用OpenGL對給定的DEM數(shù)據(jù)進(jìn)行三維可視化。然后在此實(shí)驗(yàn)的基礎(chǔ)上,實(shí)現(xiàn)利用鍵盤控制三維地形圍繞地形的中心旋轉(zhuǎn),同時(shí)實(shí)現(xiàn)按鍵縮放與平移。最后在此實(shí)驗(yàn)基礎(chǔ)上,增加光源、材質(zhì)等光照效果,從而完成整個實(shí)驗(yàn)。實(shí)驗(yàn)?zāi)康娜绾无D(zhuǎn)化并讀入數(shù)據(jù),了解OpenGL幾何變換基本原理,掌握OpenGL基本變換編程技能。了解光照基本原理與知識;練習(xí)使用OpenGL光照函數(shù),如glLight,glMaterial,glColorMaterial等函數(shù)。2、實(shí)驗(yàn)代碼與分析#pragmacomment(lib,"glu32.1ib")#pragmacomment(lib,"glut32.1ib")#pragmacomment(lib,"opengl32.1ib")#defineGLUT_DISABLE_ATEXIT_HACK#include<GL/glut.h>〃引入OpenGL工具庫,glut.h頭文件include<stdlib.h>//調(diào)用stdlib.h,該文件包含了的C語言標(biāo)準(zhǔn)庫函數(shù)的定義include"stdio.h"http://提供有關(guān)標(biāo)準(zhǔn)輸入輸出的信息的信息#include<fstream>〃定義輸入與輸出流#include〈string〉//字符串變量usingnamespacestd;voidinit(void);voidreshape(intw,inth);voiddisplay(void);voidReadData(char*fileName);voidkeyboard(unsignedcharkey,intx,inty);voidDrawDEM();#defineNROW473#defineNCOL569externfloatxllcorner=0.0;externfloatyllcorner=0.0;floatDEMdata[NROW][NCOL];floatcellsize;inti,j;staticintangle=0;inta=0,b=0,z=l;intmain(intargc,char**argv)〃主函數(shù)(glutlnit(&argc,argv);//對GLUT進(jìn)行初始化,處理所有命令行參數(shù)glutlnitDisplayMode(GLUT_DOUBLE|GLUT_RGB);〃設(shè)定窗口模式:雙緩沖窗DIIRGBA模式glutlnitWindowSize(800,600);〃指定窗口大小glutlnitWindowPosition(0,0);〃指定窗口左上角的屏幕位置glutCreateWindow(argv[0]);〃聲明創(chuàng)建一個支持渲染的窗口init();〃自定義初始化函數(shù)InitReadData("dem.txt");〃從"d:\\dem.txt”讀取數(shù)據(jù)glutDisplayFunc(display);〃設(shè)置一個display函數(shù)當(dāng)需要進(jìn)行畫圖時(shí)就調(diào)用display函數(shù)glutReshapeFunc(reshape);〃設(shè)置一個reshape函數(shù)當(dāng)初次建立窗口或者窗口發(fā)生變化時(shí)就調(diào)用reshape函數(shù)glutKeyboardFunc(keyboard);//調(diào)用鍵盤函數(shù)glutMainLoop();〃實(shí)際顯示創(chuàng)建的那個窗口,啟動程序(事件循環(huán)函數(shù))return0;}voidinit(void){glClearColor(0.0,0.0,0.0,0.0);//將窗口清為黑色glShadeModel(GL_SMOOTH);〃設(shè)置平滑著色模式GLfloatlight_position[]={0.0,0.0,1.0,0.0};〃設(shè)置光源位置GLfloatlight_ambient[]={0.1,0.1,0.1,1.0};〃設(shè)置材質(zhì)的環(huán)境顏色GLfloatlight_diffuse[]={0.8,0.8,0.0,1.01;〃設(shè)置材質(zhì)的散射顏色GLfloatlight_specular[]={0.2,0.2,0.2,1.0};//設(shè)置材質(zhì)的鏡面反射顏色GLfloatlmodel_ambient[]={0.1,0.1,0.1,1.0};〃全局環(huán)境光glLightfv(GL_LIGHT0,GL_POSITION,light_position);glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);GLfloatmat_ambient[]={0.1,0.1,0.1,1.0};GLfloatmat_diffuse[]={0,8,0.8,0.8,1.0};GLfloatmat_specular[]={0,1,0.1,0.1,1.0};glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);glEnable(GL_LIGHTING);glEnable(GL_LIGHTO);voidReadData(char*fileName){ifstreamifile;ifile.open(fileName);stringtemp;longncols,nrows;floatNODATA_value;ifile?temp?ncols;ifile?temp?nrows;ifile?temp?xllcorner;ifile?temp?yllcorner;ifile?temp?cellsize;ifile?temp?NODATA_value;for(intiRows=0;iRows<NROW;iRows++){for(intiCols=0;iCols<NCOL;iCols++){ifile?DEMdata[iRows][iCols];//讀入每行每列的數(shù)據(jù)voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);〃視口的左下角坐標(biāo)為(0,0),以及寬度w與高度hglMatrixMode(GL_PROJECTION); 〃設(shè)置矩陣為投影矩陣glLoadldentity(); 〃將投影矩陣設(shè)置為單位矩陣glOrtho(-l00,6000,-100,5000,-5000,5000); 〃設(shè)置視景體的位置glMatrixMode(GL_MODELVIEW); 〃設(shè)置視圖模型矩陣voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT); 〃將顏色緩沖區(qū)清除為黑色

glColor3f(1.0,0glColor3f(1.0,0.0,0.0);〃將地形的顏色設(shè)置為紅色glPushMatrix。;//壓棧glScalef(1.0,1.0,(GLfk)at)z);〃按鍵沿著z軸縮放glTranslatef(0.5,(GLfloat)a,0.5);〃按鍵向y軸平移glTranslatef((GLfIoat)b,0.5,0.5);〃按鍵向x軸平移glRotatef((GLfioat)angle,0.0,0.0,1.0);glTranslatef(2500,2000,-900); 〃地形每點(diǎn)平移(2500,2000,-900)glRotatef(-60,1.0,0,0); 〃地形繞X軸順時(shí)針旋轉(zhuǎn)60°glRotatef(45,0.0,l,0); 〃地形繞丫軸逆時(shí)針旋轉(zhuǎn)45°glTranslatef(-2500,-2000,-900); 〃每點(diǎn)平移(-2500,-2000,-900)DrawDEM();glPopMatrix();〃彈棧glFhish();〃強(qiáng)制繪圖glutSwapBuffers();structMYRGB〃定義一個結(jié)構(gòu)MYRGBfloatr;floatg;floatb;};voidCalColor(MYRGBrgbO,MYRGBrgbl,MYRGB&curRgb,floatvO,floatv1,floatv){curRgb.r=(v-vO)*(rgb1.r-rgbO.r)/(v1-vO)+rgbO.r;curRgb.g=(v-vO)*(rgb1.g-rgbO.g)/(vl-vO)+rgbO.g;curRgb.b=(v-vO)*(rgbl.b-rgbO.b)/(vl-vO)+rgbO.b;//用公式計(jì)算出curRgb的顏色)voidDrawDEM(){glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);for(i=0;i<568;i++)(for(j=0;j<472;j++){glBegin(GL_QUADS);//4邊型glVertex3f(cellsize*i,cellsize*j,DEMdata[i][j]);//vertex頂點(diǎn)glVertex3f(cellsize*(i+1),cellsize*j,DEMdata[i+l][j]);glVertex3f(cellsize*(i+1),cellsize*(j+l),DEMdata[i+l][j+l]);glVertex3f(cellsize*i,cellsize*(j+1),DEMdata[i][j+1]);glEnd();)voidkeyboard(unsignedcharkey,intx,inty)〃定義鍵盤函數(shù)(switch(key)(case'N':angle=(angle+l0)%360;glutPostRedisplayO;break;//逆時(shí)針旋轉(zhuǎn)case'M':angle=(angle-l0)%360;glutPostRedisplayO;break;//順時(shí)針旋轉(zhuǎn)case'A':b+=10;glutPostRedisplayO;break;//沿X軸正向移動case'D':b-=10;glutPostRedisplayO;break;〃沿X軸負(fù)向移動case'W':a+=10;glutPostRedisplayO;break;//沿Z軸正向移動case'S':a-=10;glutPostRedisplayO;break;〃沿Z軸負(fù)向移動-case'Q':z=z+10;glutPostRedisplayO;break;//沿Z軸放大default:break;3、實(shí)驗(yàn)結(jié)果打開程序界面

14125.?14125.?、??正向移動負(fù)向移動沿X正向移動沿X負(fù)向移動順時(shí)針旋轉(zhuǎn)逆時(shí)針旋轉(zhuǎn)沿Z軸縮小4、實(shí)驗(yàn)體會本次實(shí)驗(yàn)共花費(fèi)三次上機(jī)的時(shí)間,成功的繪制處出了一副三維地形圖,并且在此基礎(chǔ)上實(shí)現(xiàn)了三維交互,實(shí)現(xiàn)了鍵盤敲擊即可進(jìn)行圖幅的旋轉(zhuǎn)、縮放、平移等操作。對opengl的開發(fā)流程有了一個比較深入的了解,對如何讀取地形數(shù)據(jù),并創(chuàng)建地形模型,對模型進(jìn)行紋理渲染,上色等模塊的實(shí)現(xiàn)有了一個全面的了解。比起上學(xué)期的計(jì)算機(jī)制圖中的MFC環(huán)境下的制圖的上機(jī)實(shí)踐而言,本次實(shí)驗(yàn),我完全是從頭到尾的實(shí)現(xiàn)了一遍程序的編寫,中間也借鑒、詢問了同學(xué)的代碼以及老師所給的源代碼,但總算編出了自己的一個三維地圖。過程雖然曲折,但感覺收獲良多,提高了自己的實(shí)踐操作能力??偟膩碚f,是一次比較滿意的上機(jī)實(shí)驗(yàn)。實(shí)驗(yàn)四:利用VRML繪制發(fā)光燈泡1、實(shí)驗(yàn)內(nèi)容結(jié)合所學(xué)知識,利用VRML實(shí)現(xiàn)發(fā)光燈泡的繪制。2、實(shí)驗(yàn)?zāi)康牧私釼RML基本概念;練習(xí)使用VRML的幾何造型、材質(zhì)、空間變換節(jié)點(diǎn)。參考數(shù)據(jù)電線長度3,線半徑0.05燈頭圓柱體高1,半徑1燈頭球半徑1發(fā)光燈泡球體半徑1.5,顏色為1,1,03、實(shí)驗(yàn)代碼及分析#VRMLV2.0utf8#DrawthecolumnShape{appearanceDEFYellowAppearancemateria]Material{diffuseColor0.30.30.3))geometryCylinder{radius1.0height1.0))Transform{translation020children[Shape{appearanceUSEYellowgeometryCylinder{radius0.05height3.0Transform{translation000children[Shape{appearanceUSEYellowgeometrySphere{radius1.0))])Transform{translation0-1.50ch

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論