球體Phong光照模型課程設(shè)計(jì)報(bào)告_第1頁(yè)
球體Phong光照模型課程設(shè)計(jì)報(bào)告_第2頁(yè)
球體Phong光照模型課程設(shè)計(jì)報(bào)告_第3頁(yè)
球體Phong光照模型課程設(shè)計(jì)報(bào)告_第4頁(yè)
球體Phong光照模型課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

課程設(shè)計(jì)球體Phong光照模型(1)掌握雙線性法矢插值模型;(2)掌握Z(yǔ)Buffer算法的思想;(3)掌握有效邊表填充算法;2、繪制體心和坐標(biāo)系中心重合的球體表面,使用Z-Buffer消隱算法進(jìn)行消隱。3、使用單點(diǎn)光源對(duì)球體進(jìn)行照射生成Phong光照模型,光源其余部分劃分為四邊形面片,先對(duì)球體網(wǎng)格模型進(jìn)行背面剔除,然后使用深度緩沖算法進(jìn)行消隱。計(jì)算面片各頂點(diǎn)的平均法矢量,然后采用雙線性法失插值計(jì)算面片內(nèi)各點(diǎn)的法矢量。最終根據(jù)每點(diǎn)的法矢量對(duì)光源的朝向,通過(guò)簡(jiǎn)單光照模型計(jì)算所獲得的光強(qiáng)。面片使用有效邊表算法填Gouraud雙線性光強(qiáng)插值模型解決了相鄰多邊形之間的顏色突變問(wèn)題,產(chǎn)生的真實(shí)感圖形顏色過(guò)渡均勻,圖形顯得非常光滑,這是它的強(qiáng)插值,其鏡面反射光效果不太理想,而且相鄰多邊形邊界處的馬赫帶效應(yīng)并不能完全消除。Phong模型提出的雙線性法矢插值模型可以有效的解決確的高光區(qū)域。Phong模型在進(jìn)行光強(qiáng)插值的時(shí)候,需要先對(duì)面片的每一個(gè)頂點(diǎn)計(jì)算平均法矢量,然后通過(guò)雙線性法矢插值計(jì)算面片內(nèi)每個(gè)點(diǎn)的法矢量,最后根據(jù)簡(jiǎn)單(1)計(jì)算面片頂點(diǎn)的平均法矢量。在CZBuffer類(lèi)先對(duì)面片每個(gè)點(diǎn)的法矢量進(jìn)行雙線性插值獲得面片內(nèi)每一點(diǎn)的法在CTestView類(lèi)的構(gòu)造函數(shù)內(nèi)設(shè)置光源個(gè)數(shù)為1,位于右上方,材質(zhì)顏色為紅色。5、繪制球面函數(shù)Normal3數(shù)組存儲(chǔ)三角形面片的頂點(diǎn)法矢量,定義了Normal4數(shù)組存儲(chǔ)四邊形面片的在程序設(shè)計(jì)中,使用Phong雙線性法矢量插值模型時(shí),計(jì)算每個(gè)面片的頂點(diǎn)坐標(biāo),同時(shí)計(jì)算每個(gè)面片的頂點(diǎn)法矢量。在CZBuffer類(lèi)內(nèi)定義了雙線性法矢量插值函數(shù)Interpolation()計(jì)算面片內(nèi)的每個(gè)點(diǎn)的法矢量。根據(jù)面片內(nèi)每一點(diǎn)的法矢量調(diào)用CLighting類(lèi)的成員函數(shù)Lighing()計(jì)算該點(diǎn)的光強(qiáng)。并在MyView構(gòu)造函數(shù)中調(diào)用了透視變化初始化函數(shù)InitParameter();構(gòu)造頂點(diǎn)表函數(shù)ReadPoint();構(gòu)造面表函數(shù)ReadFace();在OnDraw()函數(shù)中使用雙緩沖函數(shù),并使用繪制球面函數(shù)DrawObject()函數(shù),畫(huà)出球體模型。設(shè)計(jì)使用的類(lèi)如下:成員函數(shù):Normalize()將顏色分量red、green、blue規(guī)范化到[0,(3)定義邊節(jié)點(diǎn)類(lèi):CAET和定義桶節(jié)點(diǎn)類(lèi):CBucket設(shè)置當(dāng)前掃描線與有效邊的交點(diǎn)的橫坐標(biāo)x定義掃描線ScanLine來(lái)求圖形與有效邊表的交點(diǎn)voidSetSpecular(CRGB);設(shè)置光源的鏡面反射光voidSetPosition(double,double,double);設(shè)置光源的直角坐標(biāo)系voidSetGlobal(double,double,double);設(shè)置光源的球坐標(biāo)voidSetCoef(double,double,double);設(shè)置光強(qiáng)的衰減voidGlobalToXYZ();球坐得的光照函數(shù)。在該函數(shù)中分五步來(lái)實(shí)現(xiàn)網(wǎng)格頂點(diǎn)的光亮度,第一,累加漫反射光voidCreateBucket();在函數(shù)中使用CBucket類(lèi)創(chuàng)建桶節(jié)點(diǎn)voidPhong(CDC*pDC,CPi3ViewPointvoidInitDeepBuffer(int,int,double);初始化深度緩存(2)程序中使用的重要函數(shù)及部分代碼:在函數(shù)中定義了片面夾角為gafa=gbeta=10;緯度區(qū)域?yàn)镹1=180/gafa=18,經(jīng)度區(qū)域N2=360/gbeta=36;利用數(shù)組P[(N1-1)*N2+2]設(shè)置的球體共有616個(gè)頂點(diǎn),經(jīng)緯網(wǎng)格的夾角為10°。P[i*N2+j+1].x=r*sin(gafal)*sP[i*N2+j+1].z=r*sin(gafal)*c}計(jì)算南極點(diǎn)坐標(biāo)(2)、構(gòu)造面片表函數(shù)ReadFace()面片用二維數(shù)組表示,第一維按維度自北極向南極增加的方向定義,第二維在同一緯度帶上z軸正向開(kāi)始,按逆時(shí)針?lè)较蚨x。球體共有N1*N2個(gè)面,北極和南極各有N2個(gè)面,其余部分有(N1-2)*N2個(gè)面片。具體實(shí)現(xiàn)代碼和算法見(jiàn)源程序。構(gòu)造北極三角形面片代碼:for(intj=0;j<N2;j++){NorthIndex[0]=0;Northlndex[1]=j+1;NorthIndex[2]=tempj+1;for(intk=0;k<F[0][j].En;k++){F[0][j].p[k]=NorthIF[0][j].SetNormal(P[NorthIndex[0]],P[NorthIndex[1]],P[Nort構(gòu)造球體四邊形面片代碼:{for(intj=0;j<N2;j++){BodyIndex[1]=(tempi-BodyIndex[2]=(tempi-1)*NBodyIndex[3]=(i-1)*Nfor(intk=0;k<F[i][j].En;k+{}F[i][j].SetNormal(P[BodyIndex[0]],P[BodyIndex[1]],P[BodyIn使用Z-Buffer算法對(duì)球面進(jìn)行深度消隱,然后使用有效邊表算法進(jìn)行填充,為減少渲染的面片數(shù),先使用凸多面體消隱算法對(duì)球體不可見(jiàn)面片進(jìn)行剔除。然后使用Z-Buffer算法對(duì)可見(jiàn)面進(jìn)行消隱,最后使用有效邊表算法進(jìn)行填充。在函數(shù)中,使用Phong雙線性法矢量插值模型,計(jì)算每個(gè)面片上的矢法量。定義了Normal3數(shù)組存儲(chǔ)三角形面片的頂點(diǎn)法矢量,定義了Norma14數(shù)組存儲(chǔ)四邊形面片的頂點(diǎn)法矢量。(4)、使用鍵盤(pán)方向鍵OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)消息響應(yīng)窗口函數(shù),代碼如下:caseVKUP:使用Phi每次自減5,按向上鍵使球體向里旋轉(zhuǎn)caseVK_DOWN:使用Phi每次自加5,按向下鍵使球體向外旋轉(zhuǎn)每次自加5,按向左鍵使球體向左旋轉(zhuǎn)caseVK_RIGHT:使用Theta每次自減5,按向左鍵使球體向右旋轉(zhuǎn)Theta=Theta-5;bdefault:break;}(5)、使用鼠標(biāo)左右點(diǎn)擊窗口響應(yīng)函數(shù),對(duì)球體進(jìn)行放大和縮小voidCMyView::OnLButtonDblClk(UINTnFlags,CPointpoint){R=R+30;在鼠標(biāo)左擊函數(shù)中視點(diǎn)半徑每次增加30,使球體縮小CView::OnLButtonDb1CvoidCMyView::OnRButtonDb1Clk(UINTnFlags,CPointpoint){R=R-30;在鼠標(biāo)右擊函數(shù)中視點(diǎn)半徑每次減少30,使球體增大CView::OnRButtonDblC(1)當(dāng)球體半徑r=150,面片夾角=10,緯度區(qū)間N1=18,經(jīng)度區(qū)間N2=36時(shí),回回(2)使用鍵盤(pán)方向向左旋轉(zhuǎn)球體,Theta=Theta+10所示結(jié)果如圖

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論