лучевая трассировка освещения - PullRequest
1 голос
/ 17 октября 2011

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

Я пытаюсь использовать следующее для обновления освещения, но сгенерированное изображение выглядит точно так же, поэтому я знаю, что делаю что-то не так. Я предполагаю, что я испортил векторы каким-то образом. Хит - это сфера, которая была поражена, а mindis - это расстояние до этой сферы. Pir, Pig, Pib - это RGB для цвета.

P3D intersection = ray.position.add(ray.direction).scale(mindis);
P3D l = intersection.sub(light).normalize();
P3D n = hit.center.sub(intersection).normalize();

double dot = l.dot(n);

P3D f = l.add(n).scale(-2.0 * dot);

double dot2 = f.dot(ray.direction);

pir += dot2 * 20;
pig += dot2 * 20;
pib += dot2 * 20;                       

1 Ответ

1 голос
/ 17 октября 2011

Возможно, первая строка должна быть:

P3D intersection = ray.position.add(ray.direction.scale(mindis));

Также

P3D f = l.add(n.scale(-2.0 * dot));

f - это направление, в котором свет отражается от сферы.Обычно это противоположное направление луча, поэтому вы, вероятно, захотите

double dot2 = -f.dot(ray.direction);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...