exam29 - MiAneko24/bmstu-cg GitHub Wiki

29. Удаление невидимых линий и поверхностей в пространстве изображений. Алгоритм Варнока (разбиение окнами): последовательность действий и основные принципы.

  • Работает в пространстве изображений

Основная идея алгоритма Варнока:

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

Необходимо ответить на вопрос, что изображать с очередном окне? Делят окно на подокна, пока для каждого окна не сможем сказать, что в нем изобразить.

Не существой единой версии алгоритма

Пример

1

Нужно изобразить те элементы, которые являются видимыми.

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

2

3

Отсекатель - окно. Закрашиваем вершину многоугольника.

В простой версии алгоритма окно делится на части, если оно не пусто. Окно является пустым, когда все многоугольники являются внешними по отношению к этому окну. Очевидный предел - 1 пиксель, тогда определяем глубину каждого из рассматриваемых многоугольников в этой точке. Изображаем точку многоугольника наиболее близкого к пользователю.

В более сложных версиях, ставится задача определения что изображать в очередном окне > 1 пикселя.
Может работать как с ребрами, так и с поверхностями. Самый простой вариант делить на 4 прямоугольных окна.

Можно устранить лестничный эффект! Продолжаем делить на части, меньшее пикселя и усреднить найденные характеристики.

Классификация многоугольников

Способы расположения многоугольников относительно окна

  • Внешний - целиком вне окна
  • Внутренний - целиком внутри окна
  • Пересекающий - пересекает границу окна
  • Охватывающий - окно находится целиком внутри многоугольника
  • С окном связано несколько многоугольников

Правила обработки окна

1. Если все многоугольники сцены являются внешними: окно закрасить цветом фона
2. Если внутри окна только один многоугольник: площадь окна вне него заполняется фоновым цветом, а сам многоугольник - своим цветом (растровая развертка).
3. Если многоугольник, связанный с окном, является пересекающим – отсечение по границе окна и п. 2
4. Если окно охвачено ровно одним многоугольником: залить окно цветом многоугольника
5. Если с окном связано несколько многоугольников, но ближе всех прочих к наблюдателю расположен охватывающий: заполнить окно цветом охватывающего многоугольника

Методы определения

  • Внутренний - габаритная проверка. Многоугольник может быть любой.
  • Внешнний (не для всех) - габаритная проверка. Не распознает огибающие окна.

xxx

  • Тест на пересечение. Посдтавляем все вершины окна во всех уравнения прямых, задающих ребра многоугольника. Если знак пробной функции не зависит от выбора вершины окна - значит нет точек пересечения. Если пересечение возможно, находится проверяется принадлежность (РЕБРУ, а не продолжению!)

  • Бесконечная прямая. Проводим луч из любой точки окна, считаем количество пересечений. Если четное - внешний, иначе - охватывающий. Если луч проходит через вершину многоугольника: считаем касание как 2 пересечения, протыкание как одно.

yyy

  • Подсчет угла. Обход по ребрам многоугольника. Суммируем углы, образованные лучами (в лююбой точке окна можно начать их) и проходящими через концы ребер. Если сумма = 0 - внешний. Сумма = +- 360 * n охватывает окно n раз. (эксперты уточните)

zzz

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

xxxx

Сумма разностей октантов = 0 - внешний, +- 8n - охватывающий.

  • Поиск ближайшего охватывающего многоугольника. Вычисляем z многоугольника в каждой вершине окна. Если глубина охватывающего многоугольника больше глубин всех других в каждой из вершин, то он расположен ближе остальных.

Возможные оптимизации

  • Сортировка многоугольнико по z
  • Хранение информации. Например если для окна данный многоугольник охватывающий - запомнить и не проверять на подокнах (подонках).
  • Списки охватывающих, пересекающих и внутренних (запоминаем на каком уровне они появились, для обхода по дереву окон пригодится)

Следующий вопрос: 30. Типы многоугольников, анализируемых в алгоритме Варнока. Методы их идентификации.

Предыдущий вопрос: 28. Алгоритм Робертса. Удаление отрезков, экранируемых другими телами.