Глава заканчивается описанием нескольких простых методов для создания теней объектов. Этот предмет достаточно сложен, для него разработано множество технологий. Два описанных алгоритма обеспечивают простые, но неполные решения этой задачи.
Еще большей реалистичности можно достигнуть применением более сложных технологий, таких как трассировка лучей. В главе 14 рассматриваются основные идеи этой технологии.
8.8. Тематические задания Тематическое задание 8.1. Создание закрашенных объектов с использованием OpenGL
Уровень сложности II, однако сложнее, чем тематическое задание 7.1.
Усложните тематическое задание 7.1, в котором камера летает по сцене, рассматривая различные полигональные каркасные объекты: установите на сцене точечный источник света и назначьте сеткам свойства различных материалов. Добавьте фоновый, диффузный и зеркальный компоненты освещения. Предусмотрите клавишное переключение между плоским и плавным закрашиваниями.
Визуализация граней для усиления реалистичности
Тематическое задание 8.2. Самодельный графический конвейер
Уровень сложности III.
Напишите приложение, в котором характеристики полигональной каркасной модели читаются из файла, как это описано в главе 6, задаются камера и точечный источник света и производится визуализация каркасного объекта с использованием плоского закрашивания с участием фонового и диффузного света. Необходимо вычислять только интенсивности серого цвета. Не используйте в данном проекте графический конвейер OpenGL, а создайте вместо него свой собственный. Определите матрицы моделирования-вида, перспективного преобразования и преобразования в порт просмотра. Организуйте все так, чтобы вершины проходили через две первые матрицы, после чего к ним применялась бы модель закраски, а затем - перспективное деление (вам не потребуется делать никакого отсечения) и преобразование в порт просмотра. Каждая вершина фигурирует в виде массива {х, у, z, b), где х и у - это экранные координаты, ab - градация яркости серого цвета данной вершины. Используйте в качестве текущей визуализации подпрограмму для рисования заполненных полигонов; если вы применяете OpenGL, то используйте только его компоненты для двумерного рисования (а также буфер глубины). Поэкспериментируйте с различными каркасными моделями, положениями камеры и источников света, чтобы убедиться в правильности установки освещения.