阿昌學(xué)習(xí)《RayTraing in one week》 (五)
第五章
這第五章主要是加入了曲面法線和多個(gè)物體。
曲面法線:就是垂直于一個(gè)曲面的向量;(作者在里提到說(shuō)是否用單位法向量是屬于個(gè)人愛(ài)好)
對(duì)于球體來(lái)說(shuō),法線就是光線與球的焦點(diǎn)減去球心

接下來(lái)我們將這個(gè)法線可視化,法線就是個(gè)vec3,我們就把這個(gè)vec3轉(zhuǎn)化顏色的數(shù)值,這里要注意的是法向量取值是(-1,1),顏色是(0,1),那么可以(x+1,y+1,z+1)*0.5,這樣就可以轉(zhuǎn)成顏色的rgb了。
那么我們將原來(lái)的代碼修改一下:

得到下邊的法線圖:

接下來(lái)我們要給我們的場(chǎng)景添加多個(gè)物體了,原本可以直接添加另一個(gè)物體,但我們直接選擇優(yōu)化一下,創(chuàng)建一個(gè)物體的抽象類,來(lái)讓物體繼承這個(gè)抽象類,只要這個(gè)物體和光線有交點(diǎn)那么就繼承它,既然是有相交的物體,那么這個(gè)抽象類就叫hitable好了。
根據(jù)一元二次方程組求解以及光線方程,我們知道光線如果和物體有交點(diǎn),那么t就會(huì)有一個(gè)取值范圍 t_min < t < t_max ,這樣就可以計(jì)算出那一個(gè)交點(diǎn)離我們更近。
先添加一下抽象類:

接下來(lái)寫(xiě)一個(gè)繼承hitable的球類sphere:

有了一個(gè)比較完整的物體球類,再寫(xiě)一個(gè)列表,方便存儲(chǔ)多個(gè)對(duì)象:

同樣的main也進(jìn)行修改,原來(lái)的hit_sphere就可以刪除了,新的main.cpp

運(yùn)行之后的得到的就是下邊這個(gè)圖了,綠色的部分就是新加的大球

下一章要添加抗鋸齒了,這樣就可以讓圖片更有feel了。