logo
Компьютерная графика / МАШ_ГРАФИКА

§ 8. Удаление невидимых граней. Расчёт теней

Рассмотрим последовательность действий, которая обычно применяется при удалении невидимых граней. Допустим, уже сформировано множество треугольных граней t t1 ,..., tn и все они непрозрачны.

I. Удаление граней, расположенных на невидимых сторонах объектов.

Для каждой грани рассматривается ее внешняя нормаль N, а также радиус-вектор r, соединяющий точку на грани с точкой наблюдения.

Рис 9.6

Если грань находится с видимой стороны объекта, то для угла y между векторами N иr выполняется условие y < 90 o , если с невидимой, то y 90 o (Рис.9.6). Данное условие проверяется для всего массива треугольников t. Из него удаляются все, у которых

yi 90 o.

Обозначим множество оставшихся треугольников через t t1 ,...tm, m<n.

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

200

Организуется последовательный просмотр множества и для каждого треугольника tJ выполняются следующие операции:

1.Рассматривается списокt, в который входят треугольники tk с номерами k = j+1, ... , m - т.е. все последующие за tJ треугольники из t. Из списка t удаляются заведомо непересекающиеся с tJ треугольники. Допустим , tk t. Обозначим координаты вершин с номерами 1, 2, 3 в треуголь-никах tJ и tk в виде:

tJ = ( (хJ 1 , уJ 1 ), ( хJ 2 , уJ 2 ), ( хJ 3 , уJ 3 ) ) ,

tk = ( (хk 1 , уk 1 ), ( хk 2 , уk 2 ), ( хk 3 , уk 3 ) ) .

Условия пересечения tJ , tk по оси х формулируются в виде двух неравенств:

( Рис.9.7)

(Рис.9.8)

Первое неравенства означает, что все вершины tJ лежат ле-вее по оси х всех вершин tk, второе неравенство - обратное условие.

Условия непересечения tJ и tk по оси y формулируются ана-логично. При непересечении tJ c tk хотя бы по одной из осей x, y треугольник tk исключается из списка t. В итоге после исключения заведомо непересекающихся с tJ треугольников из списка t получается сокращённый список t треуголь-ников, которые имеют пересечения с tJ по обеим коор-динатам. Если список t пуст, то треугольник tJ сохра-няется в списке t и рассматривается треугольник из этого списка с последующим номером (переход к пункту 1).

Eсли список t не пуст, то это означает, что есть тре-угольники, пересекающиеся с tJ одновременно по обеим координатам. Эта ситуация встречается наиболее часто.

201

Рис. 9.7 Рис. 9.8

Здесь используется более углубленный анализ относитель-ного положения граней.

  1. Поочередное сравнение треугольника tJ с треугольниками из t. Возможны следующие случаи относительного расположения tJ и треугольников tst:

а) треугольники не пересекаются (Рис.9.9), поэтому никаких действий производить не требуется.

Рис. 9.9 Рис. 9.10

202

б) tJ попадает внутрь ts (Рис. 9.10). Дополнительно анали-зируется их близость к наблюдателю. Если ts ближе, то tJ ис-ключается из списка видимых граней и его анализ закан-чивается. Если tJ ближе, то видимая часть ts делится на новые треугольные грани, которые включают в список t вместо ts .

в) ts попадает внутрь tJ (Рис. 9.11). Обработка аналогична.

Рис. 9.11 Рис. 9.12

г) треугольники tJ и ts пересекаются (Рис. 9.12). Исходя из близости граней к наблюдателю невидимые части граней исключаются, оставшиеся части при необходимости разбивают на новые треугольники и рассматривают вместо исходной грани.

Алгоритмы нанесения теней идентичны алгоритмам удаления скрытых граней с той разницей, что во втором случае определяются поверхности, видимые наблюдателем, а в первом – поверхности, видимые из источника освещения (осве-щаемые). Эти поверхности воспринимают свет от источника в отличие от не воспринимающих невидимых (затенённых) поверхностей. Поскольку на сцене, как правило, всегда присутствует несколько источников (в том числе – и рассеян-

203

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

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