Я пытаюсь реализовать мягкие тени в моем трассировщике лучей. Для этого я планирую стрелять несколькими теневыми лучами от точки пересечения к источнику света области. Я стремлюсь использовать свет сферической области - это означает, что мне нужно генерировать случайные точки на сфере для вектора направления моего луча (напомним, что лучи указаны с началом и направлением).
Я искал способы сгенерировать равномерное распределение случайных точек на сфере, но они кажутся немного более сложными, чем то, что я ищу. Кто-нибудь знает какие-либо методы создания этих точек на сфере? Я считаю, что мой источник света в области сферы будет просто определяться его мировыми координатами XYZ, значением цвета RGB и радиусом r.
На этот код я ссылался в Graphics Gems III, стр. 126 (это тот же метод, который обсуждался здесь и
} Это нормально, и я понимаю это, но мой сферический источник света будет в некоторой точке пространства, заданной трехмерными координатами X-Y-Z и радиусом. Я понимаю, что формула работает для единичных сфер, но я не уверен, как формула учитывает расположение сферы. Спасибо, и я ценю помощь!void random_unit_vector(double v[3]) {
double theta = random_double(2.0 * PI);
double x = random_double(2.0) - 1.0;
double s = sqrt(1.0 - x * x);
v[0] = x;
v[1] = s * cos(theta);
v[2] = s * sin(theta);