首先,讓咱們製做一個發光的材料。咱們須要一個發光函數(咱們也能夠把它加到hit_record裏,這取決於你的設計品位).就像背景,它只告訴光線它是什麼顏色,它不反射。這很簡單:函數
這樣我就沒必要讓全部非發射材料實現emit(),而後個人基類返回黑色:spa
接下來,咱們將顏色函數中的背景設爲黑色,並注意emmit:設計
如今,咱們作一些矩形。矩形一般能夠方便地建模人造環境。我很喜歡作等腰矩形,由於它們很簡單。(咱們會講到實例化以後再旋轉它們).3d
首先,這裏有一個xy平面的矩形。這樣一個平面由它的z值定義。例如,z = k。一個軸向的矩形由x=x0、x=x一、y=y0、y=y1幾行定義。blog
要肯定一條光線是否擊中這個矩形,咱們得先確認光線擊中這個平面的位置,回想一下,光線p (t) = a + t*b的z份量由z(t) = az + t*bz定義。從新排列這些項咱們能夠解出z=k時的t。it
t = (k-az) / bzclass
一旦咱們有了t,咱們就能夠把它代入x和y的方程:反射
x = ax + t*bx
y = ay + t*byim
若是x0 < x < x1,而y0 < y < y1,則是命中的。d3
矩形方程以下:
撞擊函數以下:
若是咱們設置一個矩形光源:
咱們能夠獲得下圖:
注意光線比(1,1,1)亮。這使得它足夠亮,能夠照亮物體。
也能夠作一些球形燈。