阿昌學(xué)習(xí)《RayTraing in one week》 (十)
第十章
主要是對攝像機(jī)的一些操作,叫做:可定位攝像機(jī)。書里說這里調(diào)試也比較麻煩,我感覺是真的挺麻煩的。
首先,讓我們有一個可調(diào)整的視野fov,作者之前使用的畫布圖像不是一個正方形,所以垂直和水平的fov值是不同的,作者喜歡垂直方向的fov,我也一樣的使用了垂直方向,但是還是保留了我自己的輸出正方形的圖。

首先,我的射線是從原點(diǎn)發(fā)射,射到z=-1的平面(原作者說-1 -2 都行),那么圖中很明顯就能得到h=tan(θ/2),有了公式就很容易得到相機(jī)模型了,那就改寫一下攝像機(jī):

額外加一下π的值:

當(dāng)然哈 主函數(shù)也要改:
主函數(shù)這邊我還是沿用了自己的200*200

書里正常應(yīng)該是輸出90度類似廣角的長畫面,我這里是一個正方形的,小伙伴也可以使用其他的比例來看,輸出結(jié)果:

現(xiàn)在攝像機(jī)可以調(diào)整視角了,接下來我們將攝像機(jī)位置也變化一下。
首先書中定義了攝像機(jī)的位置叫l(wèi)ookfrom,看向的點(diǎn)叫l(wèi)ookat。

這里他加了一個比喻,就是說你站直了,你的頭還是可以左右轉(zhuǎn)動的:

我們實(shí)際上可以使用任何我們想要的向上的向量,簡單的把他投射到這個平面上得到一個向上的向量,所以就得到了vup,通過叉乘計(jì)算,就可以得到一個完整的蒸餃(u,v,w)。這里我建議小伙伴自己畫一下圖,真的很有必要,畫出來就知道vup和uvw的關(guān)系了。
接下來就是修改代碼了:

回到main函數(shù),用上一章的那幾個球:

我給出自己的輸出的圖:

多跑幾個配置的圖也可以看看,我這里就不多跑其它的圖了。關(guān)于攝像機(jī)還剩最后一個部分 —— 景深(直譯是聚焦模糊)。