我在JS中编写了一个非常原始的光线跟踪器,它通过从每个像素拍摄一条光线并检查它是否与立方体相交来渲染一个立方体。如果它相交,则该像素设置为白色,如果不相交,则为黑色。
但是,对象从正确的位置开始,但尺寸不正确。最好用图片解释:
我已发布代码here 但是如果你运行它,则需要很长时间如果你想加快它,那么减少迭代次数
function main_v
我认为问题在于光线交叉测试(intersect_b功能)但是我无法追踪问题。交叉函数直接从here
改编答案 0 :(得分: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中,^
运算符是按位XOR,而不是取幂。只需改为编写r.x*r.x + r.y*r.y + r.z*r.z
。