6 矩形光源
首先,讓我們制作一個發光的材料。我們需要一個發光函數(我們也可以把它加到hit_record里,這取決于你的設計品位).就像背景,它只告訴光線它是什么顏色,它不反射。這很簡單:
這樣我就不必讓所有非發射材料實現emit(),然后我的基類返回黑色:
接下來,我們將顏色函數中的背景設為黑色,并注意emmit:
現在,我們做一些矩形。矩形通常可以方便地建模人造環境。我很喜歡做等腰矩形,因為它們很簡單。(我們會講到實例化之后再旋轉它們).
首先,這里有一個xy平面的矩形。這樣一個平面由它的z值定義。例如,z = k。一個軸向的矩形由x=x0、x=x1、y=y0、y=y1幾行定義。
要確定一條光線是否擊中這個矩形,我們得先確認光線擊中這個平面的位置,回想一下,光線p (t) = a + t*b的z分量由z(t) = az + t*bz定義。重新排列這些項我們可以解出z=k時的t。
t = (k-az) / bz
一旦我們有了t,我們就可以把它代入x和y的方程:
x = ax + t*bx
y = ay + t*by
如果x0 < x < x1,而y0 < y < y1,則是命中的。
矩形方程如下:
撞擊函數如下:
如果我們設置一個矩形光源:
我們可以得到下圖:
注意光線比(1,1,1)亮。這使得它足夠亮,可以照亮物體。
也可以做一些球形燈。
轉載于:https://www.cnblogs.com/TooYoungTsukasa/p/9353727.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: Mac 完全卸载 Java
- 下一篇: 勾股数性质