圖形學(xué)試驗(yàn)報(bào)告_第1頁(yè)
圖形學(xué)試驗(yàn)報(bào)告_第2頁(yè)
圖形學(xué)試驗(yàn)報(bào)告_第3頁(yè)
圖形學(xué)試驗(yàn)報(bào)告_第4頁(yè)
圖形學(xué)試驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——圖形學(xué)試驗(yàn)報(bào)告

計(jì)算機(jī)圖形學(xué)

試驗(yàn)報(bào)告

姓名:張曉波

學(xué)號(hào):09008132

2023年12月

試驗(yàn)4通過層級(jí)建模,建立可交互三維物體試驗(yàn)?zāi)康?/p>

1.2.3.

進(jìn)一步了解OpenGL程序的結(jié)構(gòu)。

理解運(yùn)用OpenGL進(jìn)行層級(jí)建模的思想。

利用層級(jí)建模方式建立可以實(shí)現(xiàn)簡(jiǎn)單交互控制的三維物體。

試驗(yàn)要求

1.2.3.

明確試驗(yàn)?zāi)康?,按試?yàn)內(nèi)容及基本步驟完成試驗(yàn)。

在試驗(yàn)過程中,結(jié)合思考與探究中的問題,通過試驗(yàn)進(jìn)行理解。理解并把握本試驗(yàn)的內(nèi)容。

試驗(yàn)內(nèi)容及基本步驟

1.模型設(shè)計(jì)

考慮到可以表達(dá)層級(jí)建模的概念,設(shè)計(jì)了一個(gè)由6個(gè)圓形組成的“玩具蛇〞,每個(gè)圓形代表一個(gè)關(guān)節(jié),形彼此相切,半徑逐漸減小,最初狀態(tài)是組成一個(gè)直線,讓用戶可以交互控制每一個(gè)關(guān)節(jié),控制其X、Y、Z三軸的旋轉(zhuǎn)。與機(jī)器手臂的概念類似。要讓物體具有層次感,則考慮讓每一節(jié)的材質(zhì)都不同。

繪制前準(zhǔn)備:

-(void)drawRect:(NSRect)rect{=4;vy=4;vz=4;glViewport(0,0,610,610);glMatrixMode(GL_PROJECTION);glFrustum(-2,2,-2,2,3,20);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(,vy,vz,0,0,0,0,1,0);glEnable(GL_CULL_FACE);glFrontFace(GL_CW);

}

glCullFace(GL_BACK);//繪圖控制glShadeModel(GL_SMOOTH);glEnable(GL_DEPTH_TEST);

x1=x2=x3=x4=x5=x6=y1=y2=y3=y4=y5=y6=z1=z2=z3=z4=z5=z6=0;

分析:采用18個(gè)變量來保存各個(gè)關(guān)節(jié)的旋轉(zhuǎn)狀況。因此每次繪制之前先單位化模型視圖矩陣,然后從底層的圓形畫起。由于每個(gè)關(guān)節(jié)之間的平移量是固定的,因此再畫下一個(gè)關(guān)節(jié)時(shí),只把前面關(guān)節(jié)的旋轉(zhuǎn)作為增量,而位移不需要,因此乘上視圖矩陣之后,應(yīng)先壓棧,然后在乘上平移矩陣,再繪制;循環(huán)下去則旋轉(zhuǎn)就成為增量,當(dāng)下次全部重繪之前在清除前面的狀態(tài),由于由變量x1~x6,y1~y6,z1~z6,保存著當(dāng)前的狀態(tài),所以可以正確繪制。此方法是基于棧的遍歷方法。在Mac的Cocoa環(huán)境里面提供的控件Slide來設(shè)置旋轉(zhuǎn)矩陣等的值,這些空間再改變值的時(shí)候可以連續(xù)的觸發(fā)函數(shù),因此將所有空間關(guān)聯(lián)到同一個(gè)繪制函數(shù)里,這樣有任何值改變就將調(diào)用繪制函數(shù),函數(shù)如下:

-(IBAction)controlsnake:(id)sender{=4;vy=4;vz=4;//視點(diǎn)初始值vrotatey=[ViewRotateYfloatValue];vzoom=[ViewZoomfloatValue];floatyline=pow((*+vz*vz),0.5);=yline*sin(((vrotatey+45)/180*pi));vz=yline*cos(((vrotatey+45)/180*pi));//繞Y軸旋轉(zhuǎn)=*(20-vzoom)/10;vy=vy*(20-vzoom)/10;vz=vz*(20-vzoom)/10;glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(,vy,vz,0,0,0,0,1,0);x1=[X1floatValue];x2=[X2floatValue];x3=[X3floatValue];x4=[X4floatValue];x5=[X5floatValue];x6=[X6floatValue];y1=[Y1floatValue];y2=[Y2floatValue];y3=[Y3floatValue];y4=[Y4floatValue];y5=[Y5floatValue];y6=[Y6floatValue];z1=[Z1floatValue];z2=[Z2floatValue];z3=[Z3floatValue];z4=[Z4floatValue];z5=[Z5floatValue];z6=[Z6floatValue];//保存六個(gè)圓形的旋轉(zhuǎn)矩陣glRotated(x1,1,0,0);glRotated(y1,0,1,0);glRotated(z1,0,0,1);glPushMatrix();GLfloatmat_ambient[]={ar,ag,ab,aa};GLfloatmat_diffuse[]={dr,dg,db,da};GLfloatmat_specular[]={sr,sg,sb,sa};GLfloatmat_shininess[]={ss};glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);//材料環(huán)境光顏色glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);//材料漫反射光顏色

}

glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);//材料鏡面反射光顏色glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);//鏡面指數(shù)glutSolidSphere(0.6,30,30);glPopMatrix();//1

glTranslated(0,1.1,0);glRotated(x2,1,0,0);glRotated(y2,0,1,0);glRotated(z2,0,0,1);glPushMatrix();

GLfloatmat_ambient2[]={ar2,ag2,ab2,aa2};GLfloatmat_diffuse2[]={dr2,dg2,db2,da2};GLfloatmat_specular2[]={sr2,sg2,sb2,sa2};GLfloatmat_shininess2[]={ss2};

glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient2);//材料環(huán)境光顏色glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse2);//材料漫反射光顏色

glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular2);//材料鏡面反射光顏色glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess2);//鏡面指數(shù)glutSolidSphere(0.5,30,30);glPopMatrix();//2

。。。。。。glFlush();

函數(shù)每次調(diào)用都會(huì)進(jìn)行所有參數(shù)的獲取,包括光照、材質(zhì)、視點(diǎn)等,為了便于觀測(cè),添加了一個(gè)繞Y軸旋轉(zhuǎn)視點(diǎn),以及移近移遠(yuǎn)視點(diǎn)的參數(shù),這樣可以更明白的看到模型的細(xì)節(jié)。程序界面如下:

2.實(shí)用手冊(cè):

程序左側(cè)是glView,右側(cè)是所有控件??梢哉{(diào)理光照位置,以及視點(diǎn)。中間的選擇框中先確定要調(diào)理的圓形,從1~6對(duì)應(yīng)的圓形從下至上。可以調(diào)理每一個(gè)圓形的材質(zhì),在Rotate框中可以選擇每一個(gè)圓形在三個(gè)軸方向上旋轉(zhuǎn)的角度。

右側(cè)最下方的兩個(gè)Slide可以使視點(diǎn)繞Y軸旋轉(zhuǎn),或者移近移遠(yuǎn)。下面是不同參數(shù)下的幾種效果:

試驗(yàn)小結(jié):

這次是在上次的基礎(chǔ)上完成的,所以GUI的界面的主題還是延續(xù)下來了,不過稍微作了改進(jìn),使操作起來比較便利。其實(shí)考慮用控件來交互的同時(shí),直接通過鍵盤也是不錯(cuò)的選擇,但是不足就是只能看到當(dāng)前的物體,而關(guān)于它的各種參數(shù)是看不到的,而且交互時(shí)控制較慢。這次的試驗(yàn)使用的層級(jí)建模遍歷是基于棧的,這個(gè)實(shí)現(xiàn)起來比較便利一點(diǎn),但是最大的毛病就是結(jié)構(gòu)比較固定,代碼都

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論