圖形學試驗報告_第1頁
圖形學試驗報告_第2頁
圖形學試驗報告_第3頁
圖形學試驗報告_第4頁
圖形學試驗報告_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——圖形學試驗報告

計算機圖形學

試驗報告

姓名:張曉波

學號:09008132

2023年12月

試驗4通過層級建模,建立可交互三維物體試驗目的

1.2.3.

進一步了解OpenGL程序的結構。

理解運用OpenGL進行層級建模的思想。

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

試驗要求

1.2.3.

明確試驗目的,按試驗內(nèi)容及基本步驟完成試驗。

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

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

1.模型設計

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

繪制前準備:

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

-(IBAction)controlsnake:(id)sender{=4;vy=4;vz=4;//視點初始值vrotatey=[ViewRotateYfloatValue];vzoom=[ViewZoomfloatValue];floatyline=pow((*+vz*vz),0.5);=yline*sin(((vrotatey+45)/180*pi));vz=yline*cos(((vrotatey+45)/180*pi));//繞Y軸旋轉=*(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];//保存六個圓形的旋轉矩陣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)用都會進行所有參數(shù)的獲取,包括光照、材質(zhì)、視點等,為了便于觀測,添加了一個繞Y軸旋轉視點,以及移近移遠視點的參數(shù),這樣可以更明白的看到模型的細節(jié)。程序界面如下:

2.實用手冊:

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

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

試驗小結:

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

溫馨提示

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

最新文檔

評論

0/150

提交評論