2011-10-17 49 views
1

我想爲一個簡單的球體射線追蹤應用實現高光和漫射照明,但是我的矢量有問題。射線追蹤照明

我想使用以下來更新燈光,但生成的圖像看起來完全一樣,所以我知道我做錯了什麼。我假設我以某種方式搞亂了這些媒介。命中是命中的球體,而思維是與球體點的距離。 Pir,豬,pib是顏色的rgb。

P3D intersection = ray.position.add(ray.direction).scale(mindis); 
P3D l = intersection.sub(light).normalize(); 
P3D n = hit.center.sub(intersection).normalize(); 

double dot = l.dot(n); 

P3D f = l.add(n).scale(-2.0 * dot); 

double dot2 = f.dot(ray.direction); 

pir += dot2 * 20; 
pig += dot2 * 20; 
pib += dot2 * 20;      

回答

1

也許的第一行應是:

P3D intersection = ray.position.add(ray.direction.scale(mindis)); 

另外

P3D f = l.add(n.scale(-2.0 * dot)); 

顯示f是光彈離球的方向。這通常是光線的方向相反,所以你可能想

double dot2 = -f.dot(ray.direction); 
+0

是的,這是一個錯誤,但圖像依然不改.. – Neutralise

+0

,圖像不會改變這一事實表明多一些基本問題。嘗試找到可以改變圖像的東西。 –

+0

如果我手動更改顏色,它會改變,代碼的組件是好的。問題出在我上面的代碼中,它沒有正確更新像素顏色以適應照明。 – Neutralise