алгоритм трассировки лучей — несколько вопросов

#opengl #graphics #raytracing

#opengl #графика #трассировка лучей

Вопрос:

несколько вопросов, касающихся алгоритма трассировки лучей:

  1. Кто-нибудь может сказать мне, пожалуйста, правильно ли я понял алгоритм трассировки лучей?

он получает первый объект, который пересекается с лучом

(если пересечений нет, он отключается)

затем, если объект является отражающим, он рекурсивно отправляет отражающий луч и вычисляет его цвет.

если объект прозрачен, он рекурсивно отправляет преломляющий луч и вычисляет его цвет.

какая последняя строка?:

  return shade(reflactColor, refractColor,p,obj)
  

вычисляет ли он цвет, выполняя среднее значение reflectColor и refractColor или что-то в этом роде?

2. где находится теневой луч? разве это не часть алгоритма

3 . и последнее.. зачем нам нужно, чтобы он был рекурсивным?

введите описание изображения здесь

Ответ №1:

Кажется, вы хорошо разбираетесь в алгоритме.

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

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

Чтобы объяснить рекурсию, можно представить себе пару зеркал, обращенных друг к другу. Вы бы получили эффект бесконечного зеркала (в реальной жизни). Если бы вы не повторяли и отбрасывали отражающие / преломляющие лучи только один раз, ваши виртуальные зеркала (или отражающие поверхности в целом), казалось бы, отражали бы только другие объекты, а не отражения других объектов. (Итак, никаких бесконечных зеркальных эффектов. 🙁 )

Комментарии:

1. если есть теневой луч …. объект не должен быть освещен или мы просто не принимаем во внимание этот конкретный источник света?

2. В простейшем случае (один источник света) объект вообще не освещается в этой точке. При использовании нескольких источников света вы можете использовать среднее значение, средневзвешенное значение или другие методы, чтобы выяснить, каким должен быть вклад.