Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Основы САПР. CAD CAM CAE

.pdf
Скачиваний:
12
Добавлен:
19.11.2023
Размер:
29.79 Mб
Скачать

82

Глава З. Основные концепции графического программирования

3.Скрытие ребра гранью можно обнаружить, сравнивая диапазоны значений Z,, ребра и грани. Возможны три случая (рнс. 3.25). В случае рис. 3.25, а все зна­ чения Zv ребра меньше минимального значения Z,, грани, то есть грань на­ ходится перед ребром. В случае рис. 3.25, б значения Z,, ребра больше макси­ мального значения Z,, грани, то есть грань находится за ребром. В случае рис. 3.25, в диапазоны значений Z,, грани и ребра перекрьшаются, то есть часть ребра находится за гранью, а другая часть - перед ней. Если ребро находится перед проверясмой гранью, из массива FАСЕ-ТABLE выбирается следующая

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

проходит ее насквозь, приходится выполнять дополнительное действие.

4. Ребро и грань проецируются на экран, после чего производится проверка пе­ рекрытия проекций. Если перскрытия нет, из этого следует, что ребро не за­ крьшает проверяемую грань. Из массива FАСЕ-ТABLE выбирается следую­

щая грань и проверяется согласно пункту 3. Если проекции перекрьшаются,

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

5. Ребра, прошедшие проверку со всеми гранями из FАСЕ-ТABLE, считаются

видимыми и выводятся на экран.

За гранью

анью

Передqп:~

 

гранью

За граньюt2JПеред

v

 

 

гранью

а

 

 

б

в

Рис. 3.25. Три возможных положения грани и ребра

Рис. 3.26. Разбиение ребра

3.8.4. Метод z-буфера

Метод z-буфера основан на том же принципе, что и алгоритм сортировки по глу­

бине: на любом участке экрана оказывается проекция элемента, расположенного

ближе всех прочих к наблюдателю. Здесь под элементами понимаются точки,

криnые или поверхности. Данный метод требует использования области памяти,

называемой z-буфером. В этом буфере для каждого пиксела хранится значение координаты Z,, того элемента, проекция которого изображается данным пиксе­ лом. Как уже говорилось, значение Zv (то есть координата z в наблюдательской системе) есть мера удаленности объекта от наблюдателя. Объем z-буфера опре-

84

Глава 3. Основные концепции графического программирования

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

слишком тонкими, потому что некоторые пикселы этих линий будут относиться

к поверхностям, ограниченным соответствующими ребрами. Эту проблему легко

решить, пододвинув весь объект поближе в момент проеriирования ребер.

3.9. Визуализация

Изображения без невидимых линий и поверхностей в большинстве случаев пе­

редают форму объекта достаточно хорошо. Однако для некоторых приложений

желательно иметь возможность строить более реалистичные изображения. Осо­

бенно важную роль реалистичность играет в «виртуальной реальности1> - отно­

сительно новой технологии, позволяющей имитировать на компьютере реальные

ситуации. Например, вы можете занести в компьютер сведения о внутреннем и внешнем виде проектируемого здания, а затем пройтись по нему и вокруг него,

чтобы прочувствовать, как оно будет выглядеть на самом деле. Это средство мо­

жет оказаться очень полезным для принятия решения о вложении денег в по­

стройку здания.

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

том, падающим на поверхности объектов. Этот процесс называется визуализаци­ ей или тоиироваиие.м. (rendering). Вообще говоря, все, что мы видим,- это отра­

жение света от поверхностей, а по этому отраженному свету мы определяем

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

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

без достаточно хорошего знания техники визуализации непросто. Поэтому в на­

стоящем разделе мы коротко опишем две основные технологии визуализации:

затушевывание (shading) и трассировка лучей (ray tr.2cing). Подробное описание технологий визуаЛизации можно найти в большинстве книг по компьютерной

графике.

3~9.1. Затушевывание

Процедура затушевывания аналогична удалению невидимых поверхностей с той

разницей, что пикселы одной поверхности окрашиваются разными цветами в со­

ответствии с цветом и интенсивностью отраженного света в точке, проектируе­

мой Ra = Кd I а на этот пиксел. Таким образом, основной задачей становится рас­

чет цвета и интенсивности света, отраженного от какой-либо точки объекта. Начнем с расчета интенсивности.

Поверхность объекта может быть освещена светом, исходящим непосредственно

от источников, то есть пря.м.ы.м. светом. (direct illиmination), а также светом, отра­

женным от других поверхностей, дающим окружающее освещеиие (aтblent illиmi­ nation). Свет, отраженный данной точкой объекта, получается сложением отра­

женных лучей двух типов (рис. 3.28).

3.9. Визуализация

87

Математически закон косинусов Ламберта может быть выражен так. Интенсив­

ность падающего света в интересующей нас точке IP считается обратно пропор­

циональной квадрату расстояния до источника света D1, поэтому для источника интенсивностью ЕР она запишется так:

I ,,

Е"

(3.18)

= - 2 .

DI

Обычно предполагается, что все источники света установлены достаточно дале­

ко от поверхностей, так что D1 может считаться одинаковым для всех точек. То­ гда закон Ламберта запишется независимо от D1:

Rd =KdE"(N ·L).

(3.19)

Здесь Rd - интенсивность диффузного отражения, Kd -

коэффициент отраже­

ния (см. формулу (3.17)), N- единичный вектор нормали к поверхности винте­ ресующей нас точке, L - единичный вектор, направленный от точки к источни­

ку света, а N · L - косинус угла падения. Вектор L постоянен для всех точек,

поскольку источник считается расположенным достаточно далеко.

Используя формулу (3.19), можно столкнуться со следующей проблемой: две параллельные плоскости, частично перекрывающиеся на экране, будут казаться

наблюдателю неразличимыми. Лучше, если бы плоскость, расположенная бли­ же, казалась более яркой, то есть имела большее значение Rd. Такого эффекта

можно достичь, изменив формулу (3.19):

R =

КЕ

" (N ·L).

(3.20)

'1

,J_

D+D

 

о

Здесь D - расстояние между интересующей нас точкой и точкой зрения наблю­ дателя, а постоянная D0 позволяет избежать деления на нуль.

Теперь займемся расчетом интенсивности зеркального отражения. Было сделано

множество попыток точно промоделировать зеркальное отражение. Мы рассмот­

рим одну типичную модель, которая носит название модели Фоига (Phong model).

Большая часть отраженного света попадает в небольшой конический объем во­

круг оси, угол которой совпадает с углом падения, но находится по другую сто­

рону от нормали к поверхности (рис. 3.33). Эта ось на рисунке обозначена еди­ ничным вектором R. Интенсивность воспринимаемого наблюдателем света будет

спадать по мере удаления вектора зрения (единичный вектор V на рис. 3.33) от вектора R. Фонг предложил следующую формулу для описания этого эффекта:

R,1

Е,,

n

(3.21)

=

K.CV·R)

 

D+D0

 

 

Здесь ЕР, D и D0 имеют тот же смысл, что и в формуле (3.20), а к. -

константа,

аналоrнчная Kd в той же формуле. К., называется коэффициентом зеркального

отражения. Формулу (3.21) можно интерпретировать так: интенсивность света, воспринимаемого наблюдателем, вектор зрения которого отклоняется от оси R

на угол ф, пропорциональна (cos q>)". Таким образом, интенсивность отражения

бЬiстро спадает с удалением от угла отражения, если n много больше единицы,

то есть отраженный свет распространяется плотным пучком вдоль оси R. Поэто­

му у блестящих поверхностей, например металлических. значение n должно

бьпь большим. Например, для такой поверхности хорошо взять значение 1l

88

Глава 3. Основные концепции графического программирования

 

 

 

порядка 150. Тусклая поверхность, например бумага или ткань, характеризуется

значение~ n, близким к единице.

R

L

v

Рис. 3.33. Векторы, используемые в модели Фонга

Теперь мы можем получить интенсивность отражения в данной точке, сложив

выражения (3.17), (3.20) и (3.21):

 

1 =Kd/d + Е/, [Kd(N·L)+K,(V·R)"].

(3.22)

D+D0

 

Чтобы учесть цвет отраженного света, достаточно записать выражение (3.22) от­ дельно для каждого из основных цветов: красного, синего и зеленого. Таким об­

разом, интенсивность отраженного света раскладывается на интенсивность крас­

ного (/,), зеленого (/g) и синего (/ь). Источники света также описываются в трех

цветах: Ia" Iag• Iаь для окружающего освещения и ЕР" Epg• ЕР1, для прямого освеще­

ния. Коэффициент отражения поверхности тоже записывается отдельно для ка­

ждого цвета: К,1" Kdg и Кdь· Например, поверхность красного цвета будет иметь значение Kd,= 1, Kdg= О, Кdь =О. Тогда выражение (3.22) можно разложить на три

равенства:

1, =Kd,Ia, +

Epr

[Kd,(N·L)+K_,(V·R)n],.

 

 

 

 

 

D+D0

 

 

 

 

1

К

1

Е

(N·L)+K (V·R)"]·

(3.23)

+ 'g

g =

c~g

щ:

1

 

·'

'

 

D + Do dg

 

lь =Кdьlаь +

Е~

[Kdь(N·L)+K,(V·R)n ].

 

 

 

 

 

D+D0

 

 

 

 

Обратите внимание, что коэффициент зеркального отражения не раскладывает­

ся на отдельные цвета. Дело в том, что зеркальное отражение практически не

влияет на цвет. Интенсивности, определяемые уравнениями (3.23), используют­

ся для задания интенсивностей электронных пушек на цветных мониторах стан­ дарта RGB.

Мы выяснили, как рассчитывается цвет и интенсивность отраженного света для одной точки объекта. Однако если нам нужно затушеванное изображение объек­ та, выражения (3.23) необходимо вычислить для всех точек объекта. Очевидно, что эта задача требует огромных вычислительных затрат для своего решения.

Одни~ из способов сократить вычисления является представление поверхно­

стей в виде наборов треугольных граней. В этом случае вектор нормали для каж-

3.9. Визуализация

89

дой грани приходится вычислять только один раз. Кроме того, векторы L, R и V в пределах каждой грани могут считаться постоянными, если предполагается,

что источники света и наблюдатель находятся далеко от объекта. Это предполо­

жение широко используется для упрощения вычислений. В итоге выраже­

ние (3.23) приходится вычислять только один раз для каждой грани. Упрощая

вычисления, мы, однако, теряем плавность перехода между соседними треуголь­

ными гранями.

Одним из решений этой проблемы является использование плавно меняющего­

ся вектора нормали в пределах каждой грани. По методу Фонга вектор единич­

ной нормали для грани вычисляется интерполяцией векторов нормали в верши­

нах этой грани. Вектор нормали в вершине вычисляется усреднением векторов нормали плоских граней, которым эта вершина принадлежит. Другое решение -

вычислять интенсивность света для каждого пиксела путем интерполяции ин­

тенсивностей в вершинах грани. Это называется затушевываиием по методу

Гуро ( Goиraиd shading).

3.9.2. Трассировка лучей

Метод затушевывания, описанный в предыдущем разделе, может использовать­

ся в относительно простых условиях, когда один объект освещается далеко рас­

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

(riiy tracing).

Основная идея метода заключается в следующем. Источники света испускают

лучи во всех направлениях, и все эти лучи прослеживаются до тех пор, пока они

не попадают в одну из точек экрана. В процессе прослеживания вычисляется из­

менение интенсивности и направления луча при падении его на какой-либо объект.

Направление меняется по законам рассеяния, отражения и преломления. Каж­ дая точка экрана (пиксел) окрашивается в цвет, соответствующий интенсивно­

сти пучка света в момент его падения на экран. Поскольку для заполнения экра­

на таким путем пришлось бы проследить бесконечно много лучей, такой подход

на практике нереален. Нас интересуют цвета конечного числа пикселов экрана,

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

Если луч достиг источника света, это означает, что между источником и экраном

отсутствуют непрозрачные препятствия, поэтому пиксел окрашивается в цвет

источника. Если луч выходит из просматриваемого объема, значит, никакие объ­

екты на данный Пиксел не проецируются, и он должен быть окрашен в цвет фона.

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

мого данной поверхностью света. Следовательно, интенсивности света на рас­

сеliвающих поверхностях должны быть вычислены заранее по методу затушевы­

ва!iия, описанному в предыдущем разделе.

Соседние файлы в папке книги