阿昌學(xué)習(xí)《RayTraing in one week》 (四)
上一章加入了攝像機(jī)和背景,這樣的就有個(gè)場景的模樣,現(xiàn)在再往這個(gè)場景里添加一個(gè)物體,而選擇添加的物體就是球體,因?yàn)榍蝮w在計(jì)算光線是否擊中的時(shí)候比較好計(jì)算。
首先是我們上學(xué)的時(shí)候?qū)W過球表面的一個(gè)方程
X2 + Y2 + Z2 = R2,這樣呢就可以有兩個(gè)判斷
X2 + Y2 + Z2 >?R2,這就說明這個(gè)點(diǎn)在球外
X2 + Y2 + Z2 <?R2,這個(gè)就是在球內(nèi)部
我們?cè)O(shè)球的圓心是(CX,CY,CZ)
那么我們的公式就變成(X - CX)2 + (Y?- CY)2 +(Z?- CZ)2? = R2
現(xiàn)在球上一個(gè)點(diǎn)P(X,Y,Z)到圓心C的距離 也就是半徑呢 就可以表示成(P-C)
那么上邊的公式就變成
(X?- CX)2 + (Y?- CY)2 +(Z?-?CZ)2??=?(P-C) * (P-C)
(P-C) * (P-C) = R2?
上一章中的光線方程 p(t) = a + t * b,把這個(gè)公式帶入
(a + t * b-C) * (a + t * b-C) = R2?
因?yàn)閠是一個(gè)未知數(shù),不難看出 這就是一個(gè)一元二次方程,那就可以整理成下邊這樣
t2b2 + 2tb*(a-C)+(a-C)*(a-C)-R2 = 0

那么一元二次方程組我們就很容易解啦

來自百度百科截圖,一元二次方程組的求根公式
接下來添加一個(gè)球體,并且賦予紅色。

運(yùn)行之后就得到下邊這個(gè)了。

標(biāo)簽: