我试图为教育和艺术目的实施一个小的2D光线追踪器。 但是我的lightmodel代码中似乎存在一个错误。
正如您所看到的那样,该线路的一个站点看起来比另一个站点更亮。
这是渲染代码: RENDERING CODE GLSL
我认为原因可能是随机数生成器,但我并不害羞,也不知道如何证明这一点。
编辑:但有时我会得到相当不错的结果:
我在Ray Line - Intersection中使用了这段代码。 Ray Line - Intersection
答案 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
}