【问题标题】:JS Ray Tracer object infinitely longJS Ray Tracer 对象无限长
【发布时间】:2014-10-02 14:39:59
【问题描述】:

我在 JS 中编写了一个非常原始的光线追踪器,它通过从每个像素发射一条光线并检查它是否与立方体相交来仅渲染一个立方体。如果相交,则该像素设置为白色,如果不相交,则设置为黑色。

但是,对象从正确的位置开始,但不是正确的尺寸。最好用一张图来解释:

我已经发布了代码here但是如果你运行它,它需要很长时间如果你想加快它然后减少迭代次数

function main_v

我认为问题出在光线相交测试(intersect_b 函数)上,但是我一直无法找到问题所在。交集函数直接改编自here

【问题讨论】:

  • 仅供参考,当我单击按钮时,您的小提琴会给出Uncaught ReferenceError: main_v is not defined

标签: javascript raytracing renderer


【解决方案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即可。

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 2016-10-07
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2014-12-07
    • 2022-07-16
    • 2015-07-18
    相关资源
    最近更新 更多