Glsl 光线跟踪器2D灯光模型已损坏

Glsl 光线跟踪器2D灯光模型已损坏,glsl,raytracing,Glsl,Raytracing,我正在尝试实现一个用于教育和艺术目的的2d光线跟踪器。 但是我的lightmodel代码中似乎有一个bug 正如你所看到的,这条线的一个位置看起来比另一个要亮得多 以下是渲染代码: 我认为原因可能是随机数发生器,但我不是舒尔,不知道如何证明这一点 编辑:但有时我会得到这样的好结果: 我用这张代码画了光线线交点。 在这里的代码中找到了错误: public static Vector2? lineSegmentIntersection(Vector2 r0, Vector2 r1, Vecto

我正在尝试实现一个用于教育和艺术目的的2d光线跟踪器。 但是我的lightmodel代码中似乎有一个bug

正如你所看到的,这条线的一个位置看起来比另一个要亮得多

以下是渲染代码:

我认为原因可能是随机数发生器,但我不是舒尔,不知道如何证明这一点

编辑:但有时我会得到这样的好结果:

我用这张代码画了光线线交点。
在这里的代码中找到了错误:

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
}
公共静态向量2?线段交点(矢量2 r0、矢量2 r1、矢量2 a、矢量2 b)
{
向量2 s1,s2;
s1=r1;//对于光线,它必须是这样的!
s2=b-a;
浮动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);
如果(s>=0&&s=0&&t