光线跟踪器2D光模型坏了

时间:2014-12-20 19:47:54

标签: glsl raytracing

我试图为教育和艺术目的实施一个小的2D光线追踪器。 但是我的lightmodel代码中似乎存在一个错误。

Bug Picture 正如您所看到的那样,该线路的一个站点看起来比另一个站点更亮。

这是渲染代码: RENDERING CODE GLSL

我认为原因可能是随机数生成器,但我并不害羞,也不知道如何证明这一点。

编辑:但有时我会得到相当不错的结果: good result

我在Ray Line - Intersection中使用了这段代码。 Ray Line - Intersection

1 个答案:

答案 0 :(得分:0)

在这里找到代码中的错误:

public static Vector2? lineSegmentIntersection(Vector2 r0, Vector2 r1, Vector2 a, Vector2 b)
{
    Vector2 s1, s2;
    s1 = r1; // FOR A RAY IT HAS TO LOOK LIKE THIS !
    s2 = b - a;

    float s, t;
    s = (-s1.Y * (r0.X - a.X) + s1.X * (r0.Y - a.Y)) / (-s2.X * s1.Y + s1.X * s2.Y);
    t = (s2.X * (r0.Y - a.Y) - s2.Y * (r0.X - a.X)) / (-s2.X * s1.Y + s1.X * s2.Y);

    if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
    {
        // Collision detected
        // Return the point of intersection
        return new Vector2(r0.X + (t * s1.X), r0.Y + (t * s1.Y));
    }

    return null; // No collision
}