2014-12-20 1 views
1

Im пытается реализовать немного 2d-raytracer для целей образования и искусства. Но, похоже, в моем коде lightmodel есть ошибка.Raytracer 2D Light Model broken

Bug Picture Как вы можете видеть, один сайт линии выглядит намного ярче, чем другой.

Вот код рендеринга: RENDERING CODE GLSL

Я думаю, что причина может быть, вероятно, генератор случайных чисел, но я не уверенны, и не знаю, как доказательство этого.

Edit: Но иногда я получаю довольно хорошие результаты, как это: good result

Я использовал этот Pice кода для Ray Line - Пересечения. Ray Line - Intersection

ответ

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 
}