Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_po_KG.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.8 Mб
Скачать
  1. Типы когерентности?

Крайне важная роль в повышений эффективности методов удаления невидимых линий и граней отводится использованию когерентности (от английского coherence - связность). Выделяют несколько типов когерентности:

• когерентность в картинной плоскости - если данный пиксель соответствует точке грани Р, то скорее всего соседние пиксели также соответствуют точкам той же грани (рис. 11.3)

Рис. 11.3.

• когерентность а пространстве объектов - если данный объект (грань), видим (невидим), то расположенный рядом объект (грань) скорее всего также является ни видимым (невидимым) (рис. 11.4).

Рис. 11.4.

• в случае построения анимации возникает третий тип когерентности – временная: грани, видимые в данном кадре, скорее всего будут видимы и в следующем; аналогично грани, невидимые в данном кадре, скорее всего будут невидимы и в следующем.

Аккуратное использование когерентности позволяет заметно сократить количество возникающих проверок и заметно повысит быстродействие алгоритма.

Рассмотрим задачу построения графика функции двух переменных z =f(x, у) в виде сетки координатных линий х = const и у = const (рис. 11.5).

Рис. 11.5

  1. Линии горизонта?

Для определения частей линии z = f(x, yk), которые не закрывают ранее нарисованных линий, на каждом шаге вводятся так называемые линии горизонта – верхний и нижний горизонты и рисуется только то, что ниже нижнего горизонта и выше верхнего. Соответственно каждая новая грань поднимает верхний горизонт и опускает нижний. Рассмотрим этот процесс более подробно.

Изначально линии горизонта не инициализированы, поэтому первая линия выводится полностью (так как она ближе всего расположена к наблюдателю, то закрывать ее ничто не может). После этого линии горизонта инициализируются так, что в выводимых точках они совпадают с линией, выведенной первой.

Вторая линия также выводится полностью и линии горизонта корректируются следующим образом: нижняя линия горизонта в любой из точек равна минимуму из двух уже выведенных линий, верхняя - максимуму (рис. 11.6).

Рис. 11.6.

Рассмотрим область экрана между верхней и нижней линиями горизонта - она является проекцией части графика функции, заключенной в полосе y1 у y2, и, очевидно, находится ближе, чем все остальные линии вида z = f(x, yi), i > 2. Поэтому те части линий, которые при проектировании попадают в эту область, указанной частью графика, закрываются и при данном способе проекти­рования не видны.

  1. Методы плавающего горизонта?

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

Пусть проекцией линии z = j(x, уk) на картинную плоскость является линия Y = Yk(X), где (X, Y) - координаты на картинной плоскости, причем Y - вертикальная координата. Контурные линии и определяются следующими соотношениями:

На экране рисуются только те части линии Y = Yk(X), которые находятся выше линии или ниже линии .

Такой метод называется методом плавающего горизонта.

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

Для рисования сегментов этой ломаной используется модифицированный алгоритм Брезенхейма, который перед выводом очередного пикселя сравнивает его ординату с верхней и нижней контурными линиями.

Рассмотрим теперь задачу, построения полутонового изображения графика функции z =f(x, у). Как и ранее, введем сетку

.

затем приблизим график функции набором треугольных граней с вершинами в точках .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]