首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二维光跟踪

二维光跟踪
EN

Stack Overflow用户
提问于 2010-11-28 17:46:35
回答 3查看 5.4K关注 0票数 2

我正在做一个演示各种镜头如何工作的程序,为此我需要一个2D ray tracing库或算法。

我搜索了光线跟踪,主要是找到了用来在3D中创建场景的东西,而我需要的是一个简单的交互式镜头模拟。

因此,任何指向2D光线跟踪算法或库的观点都是受欢迎的。我正在使用Python。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-03 16:25:18

我成立这个小组是因为我对这类事情感兴趣,

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

在这里,您将找到python光线跟踪器的(非详尽的)列表,它们将为您指明正确的方向。我还有一个用Python编写的光线跟踪器,它可以做你需要的事情,但它还没有发布!

票数 3
EN

Stack Overflow用户

发布于 2010-11-28 18:13:22

这个问题有两个部分:

找出光线折射后的光线内容hits

  • Calculating

为了找出光线击中了什么,我将镜头的形状离散化。因此,您只需要针对直线进行测试。

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

代码语言:javascript
运行
复制
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;
    }
  }
}

在hit上,将向量版本的snellius法则应用于射线方向,并将新的起点设置为入射点。然后从该点再次开始光线跟踪。

您还需要注意,光线不会立即再次命中相同的线段。要做到这一点,要么将这一行列入黑名单,要么将该位置设置为比这行稍高一点(position+=epsilon*direction)

重复该操作,直到没有更多的命中,即光线离开长方体。

票数 2
EN

Stack Overflow用户

发布于 2021-09-07 19:08:48

我不确定这解决了你的问题,但至少对于“找出光线击中什么”,你总是可以通过使每一条线(x0,y0)-(x1,y0)变成一个四边形(x0,y0,z=0)-(x1,y1,z=1),然后将你所有的光线(ex,ey)+r*(dx,dy)变成一个" 3D“光线(ex,ey,z=0.5)+r*(dx,dy,0.f)来将2D场景”嵌入“到3D场景中。然后,您可以使用任何3D光线跟踪库,如embree或optix来跟踪这些光线,并找到被击中的“四边形”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4296219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档