我正在做一个演示各种镜头如何工作的程序,为此我需要一个2D ray tracing库或算法。
我搜索了光线跟踪,主要是找到了用来在3D中创建场景的东西,而我需要的是一个简单的交互式镜头模拟。
因此,任何指向2D光线跟踪算法或库的观点都是受欢迎的。我正在使用Python。
发布于 2011-01-03 16:25:18
我成立这个小组是因为我对这类事情感兴趣,
http://groups.google.com/group/python-ray-tracing-community/web/list-of-python-statistical-ray-tracers。
在这里,您将找到python光线跟踪器的(非详尽的)列表,它们将为您指明正确的方向。我还有一个用Python编写的光线跟踪器,它可以做你需要的事情,但它还没有发布!
发布于 2010-11-28 18:13:22
这个问题有两个部分:
找出光线折射后的光线内容hits
为了找出光线击中了什么,我将镜头的形状离散化。因此,您只需要针对直线进行测试。
查找第一个命中的伪代码:
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)
重复该操作,直到没有更多的命中,即光线离开长方体。
发布于 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来跟踪这些光线,并找到被击中的“四边形”。
https://stackoverflow.com/questions/4296219
复制相似问题