我正致力于展示各种镜头如何工作以及我需要的程序 2D ray tracing库或算法。
我搜索了光线追踪,并且主要发现用于在3D中创建场景的东西,而我的要求是一个简单的交互式镜头模拟。
所以欢迎任何关于2D射线追踪算法或库的观点。我正在使用Python。
答案 0 :(得分:2)
这个问题有两个部分:
为了找出光线射击的内容,我会将镜头的形状离散化。所以你只需要测试直线。
找到第一个命中的伪代码:
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 *方向)来做到这一点
重复直到没有更多的命中,即光线离开盒子。
答案 1 :(得分:2)
我开始这个小组因为我对这种事感兴趣,
在这里,您将找到一个(非详尽的)python ray tracers列表,它应该指向正确的方向。我还有一个用Python编写的光线跟踪器,它可以满足您的需求,但尚未发布!