Поверхности, пропускающие свет
Поверхности могут обладать не только свойствами зеркального и диффузного отражения, но и свойствами направленного и диффузного пропускания. Направленное пропускание света происходит сквозь прозрачные вещества (например, стекло или отшлифованный люциит). Через них обычно хорошо видны предметы, даже несмотря на то, что лучи света, как правило, преломляются, т. е. отклоняются от первоначального направления. Диффузное пропускание света происходит сквозь просвечивающие материалы (например, замерзшее стекло), в которых поверхностные или внутренние неоднородности приводят к беспорядочному перемешиванию световых лучей. Поэтому когда предмет рассматривается через просвечивающее вещество, его очертания размыты.
Изложим кратко идею только одного метода (подход Уиттеда), учитывающего пропускающий свет. Данный подход основан на использовании алгоритмов трассировки лучей. Его основная идея заключается в трассировании световых лучей и определении, какие из этих лучей попадают в точку зрения. К сожалению, из каждой точки источника света исходит бесконечное число лучей, причем большинство из них никогда не достигает точки зрения. Поэтому трассирование начинается из точки зрения и лучи отслеживаются в обратном направлении через каждый пиксель к их источнику. Луч света, падающий на поверхность, в общем случае разделяется на три части: диффузно отраженный свет, зеркально отраженный свет и пропущенный (и, следовательно, преломленный) свет. Аналогично луч света, исходящий от поверхности объекта, в общем случае является суммой составляющих от трех источников. Это означает, что каждый раз, когда луч исходит от объекта, возможно появление трех новых лучей, которые должны быть оттрассированы. К сожалению, диффузное отражение приводит к появлению бесконечного числа лучей, поэтому трассируются только лучи, появляющиеся в результате зеркального отражения и преломления. Для моделирования рассеянного и диффузного света используется уравнение
Id = Ia × ka + Ip × kd × ( × )
Детализация поверхностей
Существуют два способа детализации поверхности: цветом и фактурой. В результате применения к гладкой поверхности детализации цветом форма поверхности не изменяется, если же производится детализация фактурой – поверхность становится шероховатой.
Детализация цветом
Детализацию цветом на глубоком уровне легко осуществить путем введения многоугольников детализации поверхности, чтобы выделить особенности (такие, как двери, окна и надписи) на основном многоугольнике (например, на стене здания). Многоугольники детализации поверхности лежат в одной плоскости с основными многоугольниками и так помечены в структуре данных, чтобы алгоритм удаления скрытых поверхностей мог присвоить им более высокие приоритеты, чем основным многоугольникам.
По мере того как детализация цветом становится более тонкой и сложной, непосредственное моделирование при помощи многоугольников становится менее практичным.
Детализация фактурой
Идея детализации фактурой состоит в отображении массива узора, представляющего собой оцифрованное изображение, на плоскую или криволинейную поверхность. Значения из массива узора используются для масштабирования диффузной компоненты интенсивности.
Один пиксель на экране может покрывать несколько элементов массива узора. Чтобы избежать проблем, связанных с лестничным эффектом, необходимо учитывать все затрагивающие пиксель элементы. Для этого определяются четыре точки в массиве узора, которые соответствуют четырем углам пикселя. Эти точки в массиве узора образуют четырехугольник. Значения попадающих в него элементов взвешиваются с учетом доли каждого элемента, а затем суммируются.
Отображение при такой детализации проводится в два этапа:
1. Фиксированное отображение рисунка на поверхность объекта.
2. Видовое преобразование объекта на экран.
Отображение массива узора влияет на расцветку поверхности, однако поверхность продолжает казаться геометрически гладкой. Существует два способа нанесения на поверхность деталей фактуры. В первом из них непосредственное геометрическое моделирование фактуры не производится, и тем не менее получается хороший визуальный эффект. Для этого вносится возмущение в нормаль к поверхности до ее использования в модели закраски. Эти возмущения моделируют небольшие неровности на поверхности.
Второй способ основывается на использовании фрактальных поверхностей, т. е. класса нерегулярных форм, задаваемых вероятностным образом и хорошо описывающих многие реальные формы, такие, как рельефы местности, береговые линии, сети рек, хлопья снега и ветви деревьев. Например, реалистичное изображение горы создается путем аппроксимации горы при помощи полигональной сетки. Каждый полигон, который необязательно является плоским, затем некоторое число раз рекурсивно подразделяется, чтобы создать неровный, с зазубринами, рельеф местности. Разбиение проводится с применением случайной функции. Таким образом, из начальной аппроксимации получается множество многоугольников. Далее проводится удаление скрытых поверхностей и применяется соответствующая модель закраски.
Библиотека OpenGL
На данный момент в Windows существует два стандарта для работы с трёхмерной графикой: OpenGL, являющийся стандартом де-факто для всех графических рабочих станций, и Direct3D – стандарт, предложенный фирмой Microsoft. Далее будет рассмотрен только стандарт OpenGL
Существенным достоинством OpenGL является его широкая распространенность – он является стандартом в мире графических рабочих станций типа Sun, Silicon Graphics и др. В основу стандарта была положена библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc.
OpenGL представляет собой программный интерфейс к графическому оборудованию (хотя существуют и чисто программные реализации OpenGL). Интерфейс насчитывает около 120 различных команд, которые программист использует для задания объектов и операций над ними (необходимых для написания интерактивных трёхмерны приложений).
OpenGL был разработан как эффективный, аппаратно-независимый интерфейс, пригодный для реализации на различных аппаратных платформах. Поэтому OpenGL не включает в себя никаких специальных команд для работы с окнами или ввода информации от пользователя.
OpenGL позволяет:
1. Создавать объекты из геометрических примитивов (точки, линии, грани и битовые изображения).
2. Располагать объекты в трёхмерном пространстве и выбирать способ и параметры проецирования.
3. Вычислять цвет всех объектов. Цвет может быть как явно задан, так и вычисляться с учётом источников света, параметров освещения, текстур.
4. Переводить математическое описание объектов и связанной с ними информации о цвете в изображение на экране.
При этом OpenGL может осуществлять дополнительные операции, такие, как удаление невидимых фрагментов изображения.
Команды OpenGL реализованы как модель клиент-сервер. Приложение выступает в роли клиента: оно вырабатывает команды, а сервер OpenGL интерпретирует и выполняет их. Сам сервер может находиться как на том же компьютере, на котором находится и клиент, так и на другом.