15.8. Эффективность алгоритма
Сазерленд, Спрулл и Шумахер [454] показали, что удаление скрытых поверхностей можно рассматривать как процесс сортировки в широком смысле. Это не удивительно, поскольку в этих алгоритмах нам встречались многие примеры сортировки и поиска. Выбор эффективного алгоритма сортировки сильно влияет на быстродействие алгоритмов удаления скрытых поверхностей. Важно также не злоупотреблять упорядочиванием, так как обычно вполне достаточно использования когерентности. Например, в алгоритме по-
!• срочного сканирования когерентность сканирующих строк используется для того, чтобы избежать полного упорядочения по х для каждой сканирующей строки. В алгоритме Хабшмана и Цукера когерентность кадров применяется для исключения лишних сравнений при работе с последовательными кадрами мультипликации
11226].
В алгоритме сортировки по глубине применяется упорядочение по z, а затем по х и у (с помощью оболочек), поэтому назовем era zxy-алгоритмом. В алгоритме построчного сканирования выполняется сортировка по у (с использованием групповой сортировки), а потом по х (вначале путем сортировки вставками, а затем при обработке каждой сканирующей строки с помощью метода «пузырька»), и в заключение производится поиск по z многоугольника, ближайшего к точке зрения; назовем его //^-алгоритмом. При разбиении области проводится параллельная сортировка по х и у, а затем поиск по z, следовательно, это (xy)z-алгоритм. В алгоритме, использующем г-буфер, непосредственное упорядочение отсутствует, производится лишь поиск по г; назовем его (л;уг)-алгоритмом.
В работе [454] показано, что порядок выполнения сортировки не имеет значения: упорядочение вначале по у не дает никаких особых преимуществ по сравнению с упорядочением по х или z и т. д. Это объясняется тем, что средний объект обладает одинаковой сложностью по всем трем направлениям. Нельзя, однако, сказать, что все алгоритмы одинаково эффективны: они различаются тем, насколько-действенно применяется когерентность для исключения сортировки, а также тем, насколько целесообразно используется память и время. В табл. 15.1 приведены результаты сравнения производительности рассмотренных нами четырех основных алгоритмов, заимствованные в работе [454], где отмечается, что, поскольку эти данные являются оценочными, можно пренебречь небольшими различиями в них, однако при этом свободно можно пользоваться сравнениями по порядку величины между различными алгоритмами, чтобы получить представление об эффективности применяемых методов.
Алгоритм сортировки по глубине эффективен при небольшом числе многоугольников, поскольку для определения, может ли многоугольник быть преобразован в растровую форму, практически всегда достаточно простых проверок на перекрытие. С увеличением числа многоугольников требуется применение более сложных тестов и более вероятной станет необходимость в разбиении многоугольника. Алгоритм, использующий z-буфер, обладает постоянной
производительностью, так как с ростом числа многоугольников в сцене число пэлов, покрываемых одним многоугольником, уменьшается. Однако такому алгоритму требуется большой объем памяти. Отдельные проверки и вычисления, применяемые в методе разбиения области, относительно сложны, поэтому в общем случае этот метод является более медленным, чем остальные.
- 1. Векторные дисплеи.
- 2. Растровые дисплеи.
- Программистская модель интерактивной графики
- Лекция 2
- 640X480
- Лекция 4. Анимация
- Лекция 7. Алгоритмы растровой графики. Растровая графика.
- Лекция 9
- Перспективные проекции
- 15.1. Введение
- 15.2. Упрощение сравнений по глубине: перспективное преобразование
- 15.3. Исключение сравнений по глубине. Оболочки
- 15.4. Алгоритм сортировки по глубине
- 15.5. Алгоритм, использующий z-буфер
- 15.6. Алгоритмы построчного сканирования
- 15.7. Алгоритмы разбиения области
- 15.8. Эффективность алгоритма
- 15.9. Алгоритмы для криволинейных поверхностей
- Введение в OpenGl
- Void glVertex[2 3 4][s I f d] (type coords)
- Void glVertex[2 3 4][s I f d]V (type *coords)
- Gl_points каждая вершина задает координаты некоторой точки. Gl_lines каждая отдельная пара вершин определяет отрезок; ес-ли задано нечетное число вершин, то последняя вершина игнорируется.
- Gl_polygon последовательно задаются вершины выпуклог многоугольника.
- OpenGl в Delphi
- Событие. Сообщение. Контекст.