- •Содержание
- •Предисловие
- •1.Основные понятия компьютерной графики
- •2.История компьютерной графики
- •3.Аппаратное обеспечение компьютерной графики
- •3.1.Устройства вывода. Экраны
- •3.2.Устройства вывода твердых копий
- •3.3.Устройства ввода. Сканеры
- •3.4.Устройства ввода. Цифровые фотоаппараты
- •3.5.Устройства координатного ввода
- •4.Свойства растровых изображений
- •4.1.Форматы хранения растровых изображений
- •4.2.Цветовые модели растровых изображений
- •5.Аффинные преобразования на плоскости
- •5.1.Понятие однородных координат
- •5.2.Однородные координаты и преобразования в пространстве
- •6.Моделирование поверхностей
- •7.Основы твердотельного моделирования
- •7.1.Методы построения 3d тел
- •7.2.Анализ твердотельных моделей
- •8.Визуализация 3d моделей
- •7Рис. 8.59 – Тор (а), параллельная (б) и центральная (в) проекции его линий очерка.
- •9.Программные технологии 3d графики
- •9.2.Интерфейс 3d api
- •9.3.Библиотека DirectX
- •9.4.Графический ускоритель
- •9.5.3D акселерация
- •10.Растровые алгоритмы
- •10.1.Удаление скрытых линий
- •11.Рендеринг
- •12.Компьютерная анимация
- •13.Предметный указатель
- •14.Список литературы
10.1.Удаление скрытых линий
При визуализации 3D сцен, особенно состоящих из многих объектов, неизбежно возникает задача удаления скрытых линий. В зависимости от выбранного направления взгляда объекты трехмерной сцены будут частично или полностью перекрывать друг друга (Рис. 10 .70).
Рис. 10.70 – Одна и та же сцена до и после удаления скрытых линий.
Рис. 10.71 – Схема удаления скрытых линий.
На Рис. 10 .71 показана поверхность сложной формы, которая проецируется на картинную плоскость. Точка 1 загораживает точку 2, потому что их проекции на картинную плоскость совпадают и при этом точка 1 находится ближе к наблюдателю (точке зрения), чем точка 2. Точка 3 же не загораживает точку 2, так она не находится между точкой 2 и наблюдателем.
Существует множество подходов к решению задачи удаления скрытых линий. Алгоритм удаления должен быть весьма эффективным, чтобы обеспечивать перерисовку изображения в реальном масштабе времени при перемещении точки зрения (оглядывании сцены).
Для векторных изображений наиболее простыми для понимания являются алгоритмы переборного типа. Для их использования необходимо иметь информацию о каждом ребре и грани каждого тела, включенного в сцену. Алгоритм в цикле перебирает все ребра и анализирует взаимное положение каждого ребра относительно каждой грани. При этом возможны три варианта взаимного расположения ребра и грани (Рис. 10 .72).
|
|
|
а) |
б) |
в) |
Рис. 10.72 – Варианты взаимного расположения ребра и грани.
а) ребро перед гранью; б) ребро за гранью; в) ребро пересекает грань
Алгоритм относительно прост в реализации, однако требует большого количества вычислений. Время его работы пропорционально произведению числа граней на число ребер в сцене. Результат работы переборного алгоритма можно видеть на Рис. 10 .70.
Для растровых изображений большое распространение получил метод Z-буфера. Название метода объясняется тем, что в нем используется специально выделенная область памяти для хранения относительной "глубины" (координаты Z) пикселов изображения. Еще одна область памяти, называемая "буфер кадра", хранит пикселы текущего создаваемого изображения.
В начальный момент в буфер глубины заносятся значения, соответствующие глубине фона (например, 255), а буфер кадра - пикселы, создающие фон (например, сканированное растровое изображение). Для каждого пиксела анализируется его "глубина", которая сравнивается с глубиной того пиксела, который имеет ту же проекцию на картинную плоскость и уже занесен в Z-буфер. Если значение "глубины" нового пиксела проекции меньше значения глубины соответствующего пиксела в z-буфере, то рассматриваемый элемент изображения находится ближе к картинной плоскости, чем часть уже построенной сцены. В этом случае новый пиксел заносится в буфер кадра и, кроме того, производится корректировка координаты z соответствующего элемента буфера глубины. Если же сравнение дает противоположный результат, то никаких действий не производится и, следовательно, буфер глубины и буфер кадра сохраняются без изменений. Таким образом, на каждом шаге мы имеем "правильное изображение" той части сцены, которая уже подверглась анализу.
Данный алгоритм применим и к векторным изображениям. В этом случае последовательность шагов такова:
1. Заполнить буфер кадра фоновым изображением.
2. Заполнить буфер глубины значениями глубины фона.
3. Для каждой грани сцены последовательно:
- преобразовать проекцию грани в растровую форму (например, при помощи алгоритма Брэзенхема);
- для каждого пиксела проекции вычислить его глубину z=z(x,y);
- сравнить значение z(x,y) с соответствующим значением буфера глубины Z(x,y);
- Если z(x,y)< Z(x,y), то:
- записать этот пиксел в буфер кадра;
- записать значение z(x,y) в соответствующую позицию буфера глубины Z(x,y).
Метод Z-буфера хорошо пригоден для накладывания изображения трехмерной сцены на заранее подготовленный фон. Результат работы метода Z-буфера показан на Рис. 10 .73.
Рис. 10.73 – Результат визуализации методом Z-буфера (SolidWorks 2003).