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

14.14. Тематические задания Тематическое задание 14.1. Эмиссионный трассировщик Уровень сложности И.

Напишите и выполните приложение, осуществляющее трассировку лучей для сцены, описанной на языке SDL. Данный трассировщик лучей должен быть способен обрабатывать излучающие объекты, испускающие свой собственный свет. (Тогда при трассировке лучей нет необходимости оперировать с фоновым, диффузным и зеркальным компонентами света.) Ваша подпрограмма должна корректно производить трассировку лучей по крайней мере для сферы, конического цилиндра, куба, квадрата и плоскости. Другие формы, описанные в файле SDL-сценария, просто игнорируются. До начала выполнения трассировки рисуется эскиз сцены с помощью метода Scene: :drawOpenGL().

Для управления работой программы используются нажатия клавиш. Клавиши «1», «2», «4», «8» задают размер пиксельных блоков, рассмотренных в разделе «Организация трассировщика луча в приложении» данной главы, которые позволяют экспериментировать с различными разрешениями. С помощью других клавиш изменяется положение и ориентация камеры.

Кроме того, создайте сцену, содержащую несколько «переключателей» («jacks») и «восьмерок» («octos»), причем организуйте все так, чтобы для этой сцены была возможна трассировка лучей. Переключатель состоит из трех взаимно перпендикулярных «стержней», причем стержень является удлиненной сферой с маленькой сферой на конце. Восьмерка состоит из маленьких сфер, расположенных в шести вершинах октаэдра, а 12 ребер между этими вершинами сделаны из удлиненных сфер.

Тематическое задание 14.2. Усовершенствованный трассировщик лучей


⇐ Предыдущая| |Следующая ⇒