В рамках трассировки Монте-Карло я создаю такие направления в полушарии, как этот.
double theta = acos(1 - 2 * uniformRandom01());
double phi = 2 * M_PI * uniformRandom01();
Vec direction(cos(theta) * cos(phi), sin(theta) * cos(phi), sin(phi));
Однако эти направления генерируются в полушарии, где его центром является вектор (0,1,0).
Теперь у меня есть точка пересечения с нормой. Как я могу повернуть сгенерированное направление, чтобы поместить его в полусферу с центром в точке пересечения нормали?
Пример полушарий
Это изображение из http://www.scratchapixel.com/lessons/3d-basic-rendering/global-illumination-path-tracing
Например, полусфера сгенерированного направления является нижней. Я хочу поместить это направление в другое полушарие, как 2 или 3 отскакивающих полушария.
Подскажите если не понятно,
Спасибо
Задача ещё не решена.
Других решений пока нет …