Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по компьютерной графике [по билетам].doc
Скачиваний:
70
Добавлен:
02.05.2014
Размер:
805.89 Кб
Скачать

Задача отсечения Вопрос 23

Если изображение выходит за пределы экрана, то на части дисплеев увеличивается время построения за счет того, что изображение строится в "уме". В некоторых дисплеях это приводит к искажению изображения. Поэтому требуется выполнения отсечения сцены по границам окна видимости.

Двумерный алгоритм Коэна-Сазерленда (Кохена-Сазерленда)

Этот алгоритм позволяет быстро выявить отрезки, которые могут быть или приняты или отброшены целиком. Вычисление пересечений требуется когда отрезок не попадает ни в один из этих классов.

Идея алгоритма состоит в следующем:

Окно отсечения и прилегающие к нему части плоскости вместе образуют 9 областей.Каждой из областей присвоен 4-х разрядный код.

Определение того лежит ли отрезок целиком внутри окна или целиком вне окна выполняется следующим образом:

  • е

    сли коды обоих концов отрезка равны 0 то отрезок целиком внутри окна, отсечение не нужно, отрезок принимается как тривиально видимый

  • если логическое & кодов обоих концов отрезка не равно нулю, то отрезок целиком вне окна, отсечение не нужно и он отбрасывается

  • если логическое & кодов обоих концов отрезка равно нулю, то отрезок может быть частично видимым или целиком невидимым для него нужно определить координаты пересечений со сторонами окна и для каждой полученной части определить тривиальную видимость или невидимость

Двумерный fc-алгоритм

Схема кодирования близка к используемой в алгоритме Коэна-Сазерленда Пространство разбивается на 9 неперекрывающихся областей, пронумерованных арабскими цифрами от 1 до 9.

Отрезок видим только в области 5, т.е. отрезок, координаты которого удовлетворяют условиям:

Xлев ≤ X ≤ Xправ     и    Yниз ≤ Y ≤ Yверх.

Каждая конечная точка отрезка V0V1 окажется с одной из этих областей. Комбинация кодов концов отрезка, называемая кодом линии, используется для определения возможных вариантов расположения отрезка и, следовательно, отсечения. Код линии формируется из кодов концов отрезка следующим образом: LineCode (V0,V1)    =   (Code(V0) ×16) + Code (V1),

здесь Code(V1) обозначает код конечной точки V1, Code(V0) × 16 означает сдвиг кода начальной точки V0 влево на 4 разряда.

Так как каждый код может принимать одно из 9 значений, то всего имеется 81 возможный вариант расположения отрезка. Но, если Code(V0) равен Code(V1), то LineCode(V0,V1) равен LineCode(V1,V0). Имеется всего 9 таких случаев: 1-1, 2-2, 9-9. Следовательно, число различных случаев уменьшается до 72.

Каждый LineCode требует своего набора вычислений для определения отсечения отрезка за минимальное время. Всего имеется 8 основных случаев отсечения, а остальные симметричны к ним. Главное отличие FC-алгоритма от алгоритма Коэна-Сазерленда состоит в упорядочивании действий по отсечению.

Виды представлений полигональных сеток:

1. Явное представление – многоугольник задается последовательностью вершин {x1,y1,z1},{x2,y2,z2},…,{xn,yn,zn}

2. Список вершин – перечисление всех вершин, встречающихся в многоугольниках: {x1,y1,z1},…,{xn,yn,zn}. При представлении многоугольника указываем лишь индексы вершин.

3. Определение многоугольника списком ребер. В такой модели грань представляется набором ребер и вершины грани определяются через ребра.

4. Крылатое представление: структура основывается на списке ребер, и для каждого ребра возникают две соседние грани. Каждое ребро ссылается на соседние грани, на ближайшие соседние ребра и опирается на две вершины. В результате ссылки для каждого ребра образуют кольцевые списки.

Полигон удобно представлять в виде списка (кольца) вершин, хранящегося в кольцевом списке с двойными связями. Необходимы функции для добавления, удаления, редактирования, поиска вершин.

Часто применяются следующие способы представления полигонов:

указатель на список вершин;

количество вершин;

указатель на текущую вершину;

функции для работы с вершинами;

функция расщепления полигона (деление полигона на два меньших по некоторой хорде);

проверка принадлежности точки полигону;

поиск наименьшей вершины (если определена некоторая функция упорядочивания).

Билет 13