版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——光線追蹤試驗(yàn)報(bào)告RayTracer光線跟蹤試驗(yàn)報(bào)告
711064XXXXX
一、試驗(yàn)?zāi)康?/p>
在計(jì)算機(jī)圖形學(xué)課程作業(yè)中,題目要求是做RayTracing或碰撞檢測(cè),其中對(duì)RayTracing的要求是:
(1)多種形狀物體,Ball,box等
(2)包含多種材質(zhì)物體:純鏡面反射、透明物體、純漫反射、半透明物體等(3)Movingina3Dworld(4)environmenttexture
二、試驗(yàn)原理
在這次試驗(yàn)中,使用了真正的光線跟蹤算法,而不是采用環(huán)境紋理來(lái)反映周邊環(huán)境。1、光線跟蹤簡(jiǎn)介
光線跟蹤是一種真實(shí)地顯示物體的方法,該方法由Appel在1968年提出為了生成在三維計(jì)算機(jī)圖形環(huán)境中的可見(jiàn)圖像,光線跟蹤是一個(gè)比光線投射或者掃描線渲染更加逼真的實(shí)現(xiàn)方法。這種方法通過(guò)逆向跟蹤與假象的照相機(jī)鏡頭相交的光路進(jìn)行工作,由于大量的類似光線橫穿場(chǎng)景,所以從照相機(jī)角度看到的場(chǎng)景可見(jiàn)信息以及軟件特定的光照條件,就可以構(gòu)建起來(lái)。當(dāng)光線與場(chǎng)景中的物體或者媒介相交的時(shí)候計(jì)算光線的反射、折射以及吸收。由于一個(gè)光源發(fā)射出的光線的絕大部分不會(huì)在觀測(cè)者看到的光線中占很大比例,這些光線大部分經(jīng)過(guò)屢屢反射逐漸消失或者至無(wú)限小,所以對(duì)于構(gòu)建可見(jiàn)信息來(lái)說(shuō),逆向跟蹤光線要比真實(shí)地模擬光線相互作用的效率要高好多倍。計(jì)算機(jī)模擬程序從光源發(fā)出的光線開(kāi)始查詢與觀測(cè)點(diǎn)相交的光線從執(zhí)行與獲得正確的圖像來(lái)說(shuō)是不現(xiàn)實(shí)的。
2、經(jīng)典光線跟蹤算法
對(duì)圖像中的每一個(gè)像素{
創(chuàng)立從視點(diǎn)通過(guò)該像素的光線初始化最近T為無(wú)限大,最近物體為空值
對(duì)場(chǎng)景中的每一個(gè)物體{假使光線與物體相交{假使交點(diǎn)處的t比最近T小{設(shè)置最近T為焦點(diǎn)的t值設(shè)置最近物體為該物體}}}假使最近物體為空值{用背風(fēng)景填充該像素}否則{對(duì)每個(gè)光源射出一條光線來(lái)檢測(cè)是否處在陰影中假使表面是反射面,生成反射光;遞歸假使表面透明,生成折射光;遞歸使用最近物體和最近T來(lái)計(jì)算著色函數(shù)以著色函數(shù)的結(jié)果填充該像素}}由以上經(jīng)典的光線追蹤算法可以發(fā)現(xiàn),在此算法中,環(huán)境中的物體等模型,并不是一次性的畫好的,而是對(duì)整個(gè)場(chǎng)景一個(gè)像素一個(gè)像素的畫上去的,光線跟蹤算法中的每一根光線要與場(chǎng)景中的每一個(gè)物體所含的每一個(gè)面求交。
三、光線跟蹤算法實(shí)現(xiàn)
1、計(jì)算觀測(cè)光線
首先需要確定光線的數(shù)學(xué)表達(dá)式。一條光線實(shí)際上只是一個(gè)起點(diǎn)和一個(gè)傳播方向,假設(shè)起點(diǎn)為O(x1,y1,z1),屏幕上一點(diǎn)為D(x2,y2,z2),則光線的方向dir(x3,y3,z3)為:dir=O–D;即x3=x1–x2;y3=y1–y2;z3=z1–z2;
在程序中,光線的起點(diǎn)定義為:
vector3o(0,0,-5);
方向?yàn)椋?/p>
vector3dir=vector3(m_SX,m_SY,0)-o;
由此可以確定一條光線Rayr(o,dir);
然后就需要求出與該光線相交的物體中的最近的交點(diǎn)2、光線與球體相交
球體由方程(x-a)2+(y-b)2+(z-c)2=r2確定,求光線是否與方程相交,只需計(jì)算方程組
(x-x1)2+(y-y1)2+(z-z1)2=R2
e+dt=0
有無(wú)實(shí)數(shù)解即可。
若令c(x1,y1,z1)為圓心,將二式帶入一式整理可得,
(d﹒d)t2+2d﹒(e-c)t+(e-c)﹒(e-c)-R2=0
這里,除了參數(shù)t外所有的都是已知的,所以也就是標(biāo)準(zhǔn)的一元二次方程,即
At2+Bt+C=0
二次解下中根號(hào)下的項(xiàng)B-4AC為判別式,它可以說(shuō)明有多少實(shí)數(shù)解。假使判別式為負(fù),球和直線沒(méi)有交點(diǎn)。假使判別式為正,則有兩個(gè)解;一個(gè)解是光線進(jìn)入球的位置,另一個(gè)是離開(kāi)的位置。假使判別式為零,光線與球相切并只有一個(gè)交點(diǎn)。代入球的方程中,并消除公共因子得
2
在實(shí)際實(shí)現(xiàn)中,在計(jì)算其他項(xiàng)之前應(yīng)當(dāng)首先檢查判別式的值。在程序中的具體實(shí)現(xiàn)如下:
intSphere::Intersect(Rayfloatb=-DOT(v,a_Ray.GetDirection());floatdet=(b*b)-DOT(v,v)+m_SqRadius;intretval=MISS;if(det>0){det=sqrtf(det);floati1=b-det;floati2=b+det;if(i2>0){if(i10){if(distGetCentre()-pi;NORMALIZE(L);vector3N=prim->GetNormal(pi);if(prim->GetMaterial()->GetDiffuse()>0){floatdot=DOT(L,N);if(dot>0){floatdiff=dot*prim->GetMaterial()->GetDiffuse()*shade;//adddiffusecomponenttoraycolora_Acc+=diff*light->GetMaterial()->GetColor()*prim->GetMaterial()->GetColor();}}下面這段代碼還計(jì)算了從交點(diǎn)('pi')到光源('L')的向量,并且通過(guò)計(jì)算這個(gè)向量
和物體表面的法向量的點(diǎn)乘積來(lái)確定該點(diǎn)的光照強(qiáng)度。這樣的計(jì)算會(huì)產(chǎn)生這樣的效果:那些面對(duì)光源的點(diǎn)要比其他的點(diǎn)要更加敞亮,背對(duì)光源的點(diǎn)將不會(huì)被照亮。//calculatediffuseshading5、反射的計(jì)算
計(jì)算一個(gè)已知法向量的點(diǎn)的反射光線,可以使用以下公式
R=V-2(V﹒N)N
其中R是反射光線的方向向量,V是入射光線的方向向量,N是該點(diǎn)的法向量計(jì)算反射光線并遞歸跟蹤的關(guān)鍵代碼如下:floatrefl=prim->GetMaterial()->GetReflection();if(refl>0.0f){vector3N=prim->GetNormal(pi);vector3R=a_Ray.GetDirection()-2.0f*DOT(a_Ray.GetDirection(),N)*N;if(a_DepthGetMaterial()->GetColor();}}
6、折射的計(jì)算
光線跟蹤同樣可以構(gòu)造經(jīng)折射的光線并繼續(xù)遞歸跟蹤,并最終將遇到的顏色信息加到最近的交點(diǎn)上。折射時(shí)可根據(jù)折射定律進(jìn)行計(jì)算,可以使用以下式子
T=(n*V)+(n*(-N﹒V)-SQRT(1.0-(n*(N﹒V))2))*N;
其中,T是折射光線的方向向量,V是入射光線的方向向量,N是該點(diǎn)的法向量,
n是兩種材料的折射率的比值
計(jì)算折射光線并遞歸跟蹤的關(guān)鍵代碼如下://calculaterefractionfloatrefr=prim->GetMaterial()->GetRefraction();if((refr>0)floatn=a_RIndex/rindex;vector3N=prim->GetNormal(pi)*(float)result;floatcosI=-DOT(N,a_Ray.GetDirection());floatcosT2=1.0f-n*n*(1.0f-cosI*cosI);if(cosT2>0.0f){vector3T=(n*a_Ray.GetDirection())+(n*cosI-sqrtf(cosT2))*N;Colorrcol(0,0,0);floatdist;Raytrace(Ray(pi+T*EPSILON,T),rcol,a_Depth+1,rindex,dist);Colorabsorbance=prim->GetMaterial()->GetColor()*0.15f*-dist;Colortransparency=Color(expf(absorbance.r),expf(absorbance.g),expf(absorbance.b));a_Acc+=rcol*transparency;}}7、Phong明暗處理
當(dāng)物體表面被光源照亮?xí)r,會(huì)形成一個(gè)高亮的光斑。這個(gè)光斑會(huì)隨著視點(diǎn)的移動(dòng)而移動(dòng),而不是固定的。Phong提出的光照模型,實(shí)際上就是把反射光的方向向量考慮了進(jìn)來(lái)。
intensity=diffuse*(L.N)+specular*(V.R)n
上式中的L是從交點(diǎn)到光源的向量,N是平面的法向量,V是觀測(cè)方向,R是L在平面上的反射向量,可以發(fā)現(xiàn)這個(gè)公式同時(shí)包含了漫反射和鏡面反射光,實(shí)現(xiàn)的代碼如下:vector3V=a_Ray.GetDirection();vector3R=L-2.0f*DOT(L,N)*N;floatdot=DOT(V,R);if(dot>0){floatspec=powf(dot,20)*prim->GetMaterial()->GetSpecular()*shade;//addspecularcomponenttoraycolora_Acc+=spec*light->GetMaterial()->GetColor();}
8、陰影效果
為了計(jì)算陰影,需要在算法中判斷點(diǎn)是否在陰影中,對(duì)于場(chǎng)景中的每個(gè)光源都創(chuàng)立一條陰影光線,再判斷對(duì)場(chǎng)景中的所有物體是否相交,若相交,則說(shuō)明物體在陰影中而光源是不可見(jiàn)的,并置shade=0;否則,說(shuō)明物體不再陰影中,光線可以照射到該點(diǎn),置shade=1;而shade最終的值在0和1之間的話表示該點(diǎn)對(duì)部分光源是可見(jiàn)的,其他的是不可見(jiàn)的。//handlepointlightsource
四、
floatshade=1.0f;if(light->GetType()==Primitive::SPHERE){vector3L=((Sphere*)light)->Ge
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年全球大宗商品電子交易行業(yè)市場(chǎng)調(diào)研及投資前景預(yù)測(cè)報(bào)告
- 廣東省茂名市電白區(qū)電海中學(xué)2024-2025學(xué)年高二上學(xué)期10月月考物理試題(選擇性)
- 河南省信陽(yáng)市光山縣慧泉中學(xué)2024-2025學(xué)年九年級(jí)上學(xué)期9月份月考英語(yǔ)試卷
- 2024-2025學(xué)年譯林牛津版初中英語(yǔ)九年級(jí)(上)教案 Unit 2 Task
- 2023-2024學(xué)年甘肅省合水縣第一中學(xué)招生全國(guó)統(tǒng)一考試高考仿真模擬信息卷押題卷數(shù)學(xué)試題
- 2023-2024學(xué)年福建省晉江市永春縣第一中學(xué)高三第一次診斷數(shù)學(xué)試題
- 工業(yè)用地整合居間合同
- 電力工程居間服務(wù)合同投標(biāo)
- 老年公寓門面改造合同樣本
- 寵物運(yùn)輸服務(wù)合同補(bǔ)充樣本
- DB32-T 4757-2024 連棟塑料薄膜溫室建造技術(shù)規(guī)范
- 工程訓(xùn)練(廣東工業(yè)大學(xué))智慧樹(shù)知到答案2024年廣東工業(yè)大學(xué)
- 鹽酸包裝說(shuō)明和使用說(shuō)明書
- 中考英語(yǔ)復(fù)習(xí)第04講 閱讀理解之應(yīng)用文(課件)
- 代駕免責(zé)協(xié)議各類合同范本大全
- 故事繪本刑天舞干戚
- 2024-2029年女裝套裝行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 田徑運(yùn)動(dòng)會(huì)體育道德風(fēng)尚獎(jiǎng)評(píng)比細(xì)則
- 實(shí)驗(yàn)室安全與防護(hù)智慧樹(shù)知到期末考試答案2024年
- Unit1FoodforThought單元課件高一英語(yǔ)
- 新生兒真菌感染
評(píng)論
0/150
提交評(píng)論