我正在研究程序,演示各种镜头如何工作,并且我需要一个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