我正在研究程序,演示各種鏡頭如何工作,並且我需要一個2D ray tracing 2D庫或算法。2D光線追蹤
我搜索了光線追蹤,主要發現了用於創建3D場景的東西,而我的要求是一個簡單的交互式鏡頭模擬。
因此,歡迎使用2D射線追蹤算法或庫的任何一點。我正在使用Python。
我正在研究程序,演示各種鏡頭如何工作,並且我需要一個2D ray tracing 2D庫或算法。2D光線追蹤
我搜索了光線追蹤,主要發現了用於創建3D場景的東西,而我的要求是一個簡單的交互式鏡頭模擬。
因此,歡迎使用2D射線追蹤算法或庫的任何一點。我正在使用Python。
我開始這個組,因爲我感興趣的是這種事情,
這裏您會找到一個(非詳盡的)python射線追蹤器列表,它應該指向正確的方向。我還有一個用Python編寫的射線追蹤器,可以滿足您的需求,但尚未發佈!
這個問題有兩個部分:
後發現什麼射線擊中我離散的形式鏡頭。所以你只需要測試直線。
僞代碼,找到第一擊:
Line hitLine=null;
double minA=+Infinity;
foreach(line in Lines)
{
Solve (Ray.Start + a*Ray.Direction) == (line.P1+b*(line.P2-line.P1)) for a and b
if(0<=b<=1) //hit the line-piece
{
if(0<=a<minA)
{
minA=a;
hitLine=line;
}
}
}
在命中應用矢量版本斯涅耳定律的射線方向和設置新的起點,事件的點。然後從這一點開始再次進行光線跟蹤。
您還需要注意光線不會立即再次撞擊相同的線條。通過將該線條黑名單或僅將該位置設置爲超出線條位置(位置+ = epsilon *方向)來做到這一點
重複,直到沒有更多的命中,即射線離開盒子。
所以你想在光學指數取決於位置的材料中進行光線追蹤?光學指數變化的地方是否存在硬性邊界,還是位置的任意函數? – CodesInChaos 2010-11-28 09:51:00
不,這是2D鏡頭演示,從簡單的凹凸透鏡到菲涅耳透鏡。存在硬邊界和多種材料(玻璃水空氣等),但在單個物體內沒有變化。 – iamgopal 2010-11-28 09:58:25