2D光线追踪

时间:2010-11-28 09:46:35

标签: simulation raytracing

我正致力于展示各种镜头如何工作以及我需要的程序 2D ray tracing库或算法。

我搜索了光线追踪,并且主要发现用于在3D中创建场景的东西,而我的要求是一个简单的交互式镜头模拟。

所以欢迎任何关于2D射线追踪算法或库的观点。我正在使用Python。

2 个答案:

答案 0 :(得分:2)

这个问题有两个部分:

  1. 找出射线击中的内容
  2. 折射后计算光线
  3. 为了找出光线射击的内容,我会将镜头的形状离散化。所以你只需要测试直线。

    找到第一个命中的伪代码:

    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)

我开始这个小组因为我对这种事感兴趣,

http://groups.google.com/group/python-ray-tracing-community/web/list-of-python-statistical-ray-tracers

在这里,您将找到一个(非详尽的)python ray tracers列表,它应该指向正确的方向。我还有一个用Python编写的光线跟踪器,它可以满足您的需求,但尚未发布!