資源描述:
《2基本光線跟蹤算法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、2基本光線跟蹤算法ERICHAINES1簡介任何光線跟蹤程序包的核心都是光線相交過程設(shè)置。不論何種光照模型,紋理映射,空間細(xì)分技術(shù),反走樣方案,還是其它光線跟蹤算法技巧,都需要找到物體與光線的交點。一旦光線進(jìn)入模擬環(huán)境,很少有各種關(guān)于光線的問題。所有需要的信息依賴于光線的目的。當(dāng)一個光線從眼睛發(fā)出,對象交點必須返回最近交點和表面法向量。當(dāng)光射向光源,需要知道是否交點比光源更近,如果是,則遮擋或者過濾光源。根據(jù)遮擋模式,濾波可能需要進(jìn)一步的信息。對于包圍盒測試,有時只需要一個簡單的碰撞與否的判斷。然而,更高效的光線跟蹤器還將利用光線的距離。光
2、線跟蹤中另一類有用的信息就是與表面參考坐標(biāo)系相關(guān)的焦點位置。這類位置信息一般用于紋理映射,以找到相應(yīng)點的表面屬性。[7]中有關(guān)于紋理映射的較好綜述。想要編寫光線跟蹤程序,光線/對象(相交)算法通常需要手工編寫。由于過程的教育性,許多程序員并不介意。另外,隨著針對不良算法的優(yōu)秀數(shù)學(xué)成果也使得算法效率不斷進(jìn)化。本文概述基本算法,用于執(zhí)行各種光線相交測試和重要數(shù)據(jù)檢索。除了抽象的方程式,還通過其后的例程展示細(xì)節(jié)。主旨在于提出高效的算法。本文僅涉及通過簡單數(shù)學(xué)方法可以得到的相交算法的對象。這限制了對二次曲面的討論,但平面和球體除外。因為球體是最簡單
3、常用的圖元,將被首先討論。隨后討論平面,并附帶多邊形相關(guān)算法。然后提出綁定盒相交算法。最后討論二次曲面。并談及關(guān)于反映射技術(shù)及其它主題。雖然用到的算法對其它渲染方案和交互圖形進(jìn)程也有用,比如hit-testing,但描述的重點在于光線跟蹤的研究。Raytracingshadowsoftransmitters,CSG樹,以及一些其他的應(yīng)用都需要找到光線的所有交點。算法的擴(kuò)展在文中直接說明,因此常識將不被討論。另一個沒被提及的光線跟蹤子集是有限長度光線跟蹤,用于動態(tài)測試,比如陰影測試中,光線的長度不能超過到達(dá)光源的距離。1.1符號以下約定將被使
4、用:*乘法abs(y)絕對值·點乘Accros(y)反余弦差乘XmodyX/y取余相等Sin(y)正弦加減Sqrt(y)平方根V矢量3.1415926M矩陣所有的角度都以弧度計算。大寫字母一般表示參數(shù),小寫字母則表示值。例如:是一個帶下標(biāo)的標(biāo)量=[1248],是一個帶下標(biāo)的四維向量是一個帶下標(biāo)的矩陣2光線/球體相交及映射球體是光線跟蹤中最常用到的圖元。在測試與光線相交時的易用性使它成為一個有用的包圍盒。因此,對其進(jìn)行了深入的研究。首先得到直接的代數(shù)解,然后檢查問題的特殊情況,得到更為有效的幾何結(jié)論。分析結(jié)果的比較顯示了兩種算法深層次的等價性
5、。對一個光線跟蹤中普通故障的研究得出一些結(jié)論。球體最普通的反向映射算法作為這一章的結(jié)束。2.1球體交點的代數(shù)結(jié)論定義一個光線:Where(i.e.noamalized)定義一個光線:直線上點的設(shè)置wheret>0(A1)當(dāng)t<0時,直線上的點在光源后面。“精度問題”章節(jié)解釋了為什么當(dāng)t=0時的點不包含在光線中。注意,光線的方向在這些計算中不必歸一化。但是推薦歸一化,否則t將代表方向向量中長度專業(yè)名詞中的距離。在相交測試前將光線方向向量歸一化可確保t在世界坐標(biāo)中與到光源的距離相等。等式(1)是參數(shù)式或顯式的光線方程。這意味著光線上所有的點可以
6、通過變換t的值得到。球的定義如下:(A2)。球表面用一個隱式方程表達(dá)。以這種方式,球面上的點不能直接得到。每個點能夠通過隱式方程檢驗;如果滿足方程條件,點就在球面。為了解決相交問題,光線方程被代入球面方程以得到t。光線方程(A1)用含t的方程組表示一個點:(A3)將方程組代入球面方程變量,我們得到:(A4)依據(jù)t,方程簡化成:(A5)其中系數(shù)A永遠(yuǎn)等于1,因為光線的方向向量已經(jīng)歸一化。在球面方程中,被事先計算。當(dāng)A=1時,這是一個二次方程,t的解是:(A6)當(dāng)判別式為負(fù)時,光線與球體不想交。更精確的公式可以得到和,見5.5[11].由于t>
7、0是光線定義的一部分,根和被檢驗。較小的正實根是光線上距離最近的交點。如果沒有這樣的跟,光線與球面不交。通過計算,一些計算能夠避免,檢測它是否大于0,如果否,則計算。一旦找到距離t,實際的交點是:(A7)球面單位法向量簡化為:(A8)如果光線起源于球體內(nèi)部(因此交于內(nèi)壁),將是負(fù)值,因此它反向指向光源。預(yù)先將乘以是合理的,因為除法比乘法更容易出錯??偨Y(jié)算法步驟如下:Step1:計算二次方程系數(shù)A,B,CStep2:計算判別式Step3:計算并比較Step4:可能計算并比較Step5:交點計算Step6:交點法向量計算假設(shè)最多的預(yù)算常量(比如
8、)和中間結(jié)果,每步的計算量如下:Step1:8次加或代入7次乘Step2:1次代入,2次乘,1次比較Step3:1次代入,1次乘,1次比較,1次平方根Step4:1次代入,1次乘