資源描述:
《光線跟蹤算法.docx》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、光線跟蹤的算法1,原理由于從光源發(fā)出的光線有無窮多條,使得直接從光源出發(fā)對光線進(jìn)行跟蹤變得非常困難。實(shí)際上,從光源發(fā)出的光線只有少數(shù)經(jīng)由場景的反射和透射(折射)后到達(dá)觀察者的眼中。為此標(biāo)準(zhǔn)光線跟蹤算法采用逆向跟蹤技術(shù)完成整個場景的繪制。光線跟蹤思路:從視點(diǎn)出發(fā),通過圖像平面上每個像素中心向場景發(fā)出一條光線,光線的起點(diǎn)為視點(diǎn),方向?yàn)橄袼刂行暮鸵朁c(diǎn)連線單位向量。光線與離視點(diǎn)最近的場景物體表面交點(diǎn)有三種可能:1.當(dāng)前交點(diǎn)所在的物體表面為理想漫射面,跟蹤結(jié)束。2.當(dāng)前交點(diǎn)所在的物體表面為理想鏡面,光線沿其鏡面發(fā)射方向繼續(xù)跟蹤。3.當(dāng)前交
2、點(diǎn)所在的物體表面為規(guī)則透射面,光線沿其規(guī)則透射方向繼續(xù)跟蹤。如圖-1中,場景中有三個半透明玻璃球,視點(diǎn)發(fā)出光線與場景最近交點(diǎn)為P1,使用任意局部光照模型(opengl使用的是phong模型)可以計(jì)算出P1點(diǎn)處的局部光亮度Ilocal,為了計(jì)算周圍環(huán)境在P1點(diǎn)處產(chǎn)生的鏡面發(fā)射光和規(guī)則折射光,光線1在P1點(diǎn)處衍生出兩支光線:反射光2和折射光3。P1處的光照由三部分組成:Ilocal+ks*I2+kt*I3I3為折射光線3的顏色,Kt為折射率I2為反射光線2的顏色,Ks為反射率I3和I2的計(jì)算需要遞歸。2,偽代碼[cpp]viewpl
3、aincopyprint?01.voidTraceRay(constVec3&start,constVec3&direction,intdepth,Color&color)02.{03.Vec3intersectionPoint,reflectedDirection,transmittedDirection;04.ColorlocalColor,reflectedColor,transmittedColor;05.if(depth>=MAX_DEPTH){06.color=Black;//#00007.}08.else{09.R
4、ayray(start,direction);//取start起點(diǎn),方向direction為跟蹤射線;10.if(!scene->HasIntersection(ray))11.color=BackgroundColor;12.else{13.計(jì)算理起始點(diǎn)start最近的交點(diǎn)intersectionPoint,14.記錄相交物體intersectionObject,15.16.//#117.Shade(intersectionObject,intersectionPoint,localColor);18.19.//#220.if
5、(intersectionPoint所在面為鏡面){21.計(jì)算跟蹤光想S在intersectionPoint處的反射光線方向reflectedDirection,22.TraceRay(intersectionPoint,reflectedDirection,depth+1,reflectedColor);23.}24.//#325.if(intersectionPoint所在的表面為透明面){26.計(jì)算跟蹤光線S在intersectionPoint處的規(guī)則透射光線方向transmittedDirection,27.TraceR
6、ay(intersectionPoint,transmittedDirection,depth+1,transmittedColor);28.}29.//#summarize30.color=localColor+Ks*reflectedColor+Kt*transmittedColor;31.}//else32.}//else33.}34.//局部光照模型計(jì)算交點(diǎn)intersectionPoint處的局部光亮度localColor35.voidShade(constObject&intersectionObj,constVec
7、3&intersectionPoint,Color&localColor)36.{37.確定intersectionObj在intersectionPoint處的單位法向量N,38.漫反射系數(shù)Kd,39.鏡面反射系數(shù)Ks,40.環(huán)境反射系數(shù)Ka;41.localColor=Ka*Ia;//Ia為環(huán)境光亮度42.for(每一個點(diǎn)光源PointLight){43.計(jì)算入射光線單位向量L和虛擬鏡面法向單位向量H,44.//由Phong模型計(jì)算光源PointLight在intersectionPoint處的漫反射和鏡面反射光亮度45.l
8、ocalColor+=(Ipointlight*(Kd*(N.dot(L))+Ks*(N.dot(H))^n));46.}47.}