6.14. Покажите, что вектор половинного направления h задает такую ориентацию поверхности, которая обеспечит максимальное отражение светового потока к наблюдателю.
6.15. Найдите такой вектор h' для преломленного луча, который определяет ориентацию поверхности, обеспечивающую максимальное отражение падающего луча в сторону наблюдателя.
Упражнения
6.16. Хотя в этой главе мы и не рассматривали операции на уровне буфера кадра, вы можете приступить к разработке собственного варианта программы трассировки лучей, предполагая существование в библиотеке функции write_pixel(x/ у, color), которая будет закрашивать цветом color (это может быть либо RGB-предствление, либо яркость) пиксель, имеющий в буфере адрес (х, у). Разработайте псевдокод программы ray, которая будет рекурсивно отслеживать приведенный луч. Считайте, что в вашем распоряжении имеется функция, анализирующая пересечение луча с объектом. Подумайте над тем, до каких пор нужно трассировать путь луча.
6.17. Разработайте программу трассировки лучей в сцене, которая включает только сферы, полагая, что в вашем распоряжении имеется функция окрашивания отдельного пикселя в буфере кадра. В программе используйте точное математическое описание сферы, а не ее аппроксимацию многогранником.
6.18. В программу формирования и отображения лабиринта из упр. 5.13 добавьте источники света и процедуру закрашивания.
6.19. Используя в качестве прототипа программу формирования сферы, приведенную в приложении А, разработайте интерактивную программу, которая позволит разместить в пространстве сцены один или два источника света и изменять свойства материала поверхности. Попробуйте с помощью этой программы подобрать свойства материалов, позволяющих смоделировать на экране поверхности объектов из металла, пластика или натурального камня.
6.20. По мере того как геометрическая информация проходит по "конвейеру", она подвергается преобразованиям поворота, сдвига, масштабирования и проецирования. Такое же преобразование выполняется и с векторами, которые определяют косинусные составляющие в модели отражения Фонга. Сохраняет ли какое-либо из этих преобразований углы между векторами? Как повлияет сформулированный ответ на реализацию процедуры закрашивания?