Главная > Математика > Геометрическое моделирование
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

9.6. Определение видимой части геометрических объектов

Векторная графика.

При построении векторных изображений определение видимой части геометрических объектов сводится к задаче удаления невидимых линий. Сетки полигонов строятся для всех поверхностей тел. Часть полигонов может оказаться закрытой от взгляда наблюдателя. При удалении невидимых линий векторные проекции приобретают более реалистический вид. На рис. 9.6.1 приведена проекция поверхности, показанной на рис. 9.4.2, без невидимых линий.

Линия очерка будет видимой, если она не закрыта другой гранью или частью своей же грани.

Рис. 9.6.1. Проекция поверхности с удалением невидимых линий

Рассмотрим один из алгоритмов удаления невидимых линий. Сначала построим пространственные полигоны геометрического объекта, включая полигоны линий очерка. Совокупность пространственных линий , соответствующих всем полигонам объекта, будем называть каркасной моделью. Далее построим проекцию (параллельную или центральную) каркасной модели на заданную плоскость. Эта проекция будет состоять из двухмерных линий . Каждой пространственной кривой соответствует двухмерная кривая . Каждой точке пространственной кривой соответствует точка двухмерной кривой. Среди линий проекции выделим те, которые являются проекциями линий очерка, ребер тел и границ поверхностей. Обозначим их через . Определим, какие части проекции каркасной модели являются видимыми, а какие нет. Для этого найдем все точки пересечения и самопересечения двухмерных кривых между собой и со всеми кривыми и разрежем этими точками линии на части. Соответствующим образом разрежем пространственные линии. Остается пометить и удалить невидимые части проекции. Теперь каждая часть линии будет или полностью видима или полностью невидима.

Рассмотрим алгоритм определения видимости линий проекции. Построим контур на плоскости проекции, охватывающий все двухмерные кривые. Все линии контура будут видимыми. Для определения видимости остальных линий возьмем произвольную точку на двухмерной кривой. Найдем соответствующую ей точку на соответствующей пространственной линии. Построим прямую линию проходящую через точку и точку наблюдения и направленную от точки наблюдения. Для параллельной проекции вектор для центральной проекции вектор . Найдем все точки пересечения этой прямой с поверхностями геометрического объекта. Если значения параметра t прямой для всех точек пересечения неотрицательные, то кривая является видимой. Если среди значений параметра t для точек пересечения найдется хотя бы одно отрицательное, то кривая является невидимой, так как ее закрывает одна из поверхностей модели, находящаяся ближе к наблюдателю, чем точка . Проделаем эту процедуру со всеми двухмерными кривыми и удалим те части проекции, которые окажутся невидимыми.

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

Рис. 9.6.2. Проекция детали с удалением невидимых линий

На рис. 9.6.2 приведено изображение детали с линиями очерка и удаленными невидимыми линиями. На рис. 9.6.3 приведено изображение детали, где невидимые линии имеют меньшую толщину, чем видимые.

Рис. 9.6.3. Проекция детали с утонением невидимых линий

Описанный алгоритм является универсальным, но требует больших затрат времени. Для геометрических объектов, описываемых плоскими гранями, существует ряд быстрых алгоритмов удаления невидимых линий. В алгоритме Галимберти и Монтанари каждое ребро геометрического объекта сопоставляется с плоскостью каждой грани объекта. Каждая плоскость грани делит все пространство на два полупространства.

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

Растровая графика.

Растровое изображение формируется из отдельных точек. При построении растровых изображений возникает необходимость определять видимую часть геометрических объектов. Уоткинс предложил алгоритм построения видимой части изображения, имеющий сходство с построчной разверткой изображения. Проецируемый объект пересекают параллельными плоскостями, ортогональными плоскости проекции. Эти плоскости называют плоскостями развертки. Каждая плоскость пересекает геометрический объект по некоторым плоским кривым. Положение этих кривых анализируется на предмет удаленности от наблюдателя. На проекции должны быть построены только ближайшие к наблюдателю линии или их части. Таким образом, на линии развертки достаточно отобразить части отрезков, видимые из точки наблюдения. Изображение формируется из строк развертки. Алгоритм Уоткинса применим для построения параллельных проекций растровой графики.

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

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

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

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

Рис. 9.6.4. Растровое изображение с определением яркости видимых точек

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

<< Предыдущий параграф Следующий параграф >>
Оглавление