2014-09-30 31 views
0

我已经在JS中写了一个非常原始的射线追踪器,它通过从每个像素拍摄一条射线并检查它是否与立方体相交仅渲染一个立方体。如果相交,则该像素设置为白色,否则设为黑色。JS Ray Tracer物体无限长

但是,对象始于正确的位置,但不是正确的尺寸。这是最好用图片解释:

raytracing attempt with one cube

我已经发布的代码here但是,如果你运行它,它会如果你想加快速度,然后减少的数量需要很长的时间

function main_v 

迭代我认为这个问题是与射线相交测试(intersect_b功能),但是我一直无法追查问题。交集功能是直接改编自here

+0

只是FYI你的小提琴给我'未捕获的ReferenceError:main_v没有定义'当我点击按钮 – 2014-10-01 19:57:15

回答

1

的一个问题是这样的:

function c2p_p(r) { 
    return r.type == vType.Cartesian ? { 
     r: Math.sqrt(r.x^2 + r.y^2 + r.z^2), 
     theta: Math.acos(r.z/Math.sqrt(r.x^2 + r.y^2 + r.z^2)), 
     phi: Math.atan2(r.y/r.x), 
     type: vType.Polar 
    } : r 
} 

在JavaScript中,^操作是按位异或,不求幂。改为写r.x*r.x + r.y*r.y + r.z*r.z