Динамическая графика 1994 г.

Анимаци в векторной графике - Полезные приемы.


3.7 Полезные приемы

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

Принцип декомпозиции.

Рис. 45 Декомпозиция на треугольники

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

Треугольники - достаточно удобные фигуры уже хотя бы тем, что они всегда вы пуклы- Рутинную работу по декомпозиции граней своего объекта можно произвести

вручную, при подготовке данных для программы, а можно ее и не производить, а поручить компьютеру, ограничившись описанием граней в виде многоугольников. Правда, при таком подходе компьютер может оказаться иногда в тупиковой ситуации, например, на рис. 46 показано, как он может "выдумать" несуществующий треугольник. Методика борьбы с этим явлением состоит в том, что надо взять себе за правило проводить разбиение всегда иэ одной и той же вершины, например иэ той, которая значится в списке первой, а первой ставить ту вершину, которая Вам удобна. Для слу чая, представленного на рис.47 такое описание будет иметь вид: 6,1,2,3,4,5.

Рис. 47 Правильная декомпозиция

Для варианта, представленного на рис.48. Вам ни вручную, ни автоматически не удастся найти приемлемого способа декомпозиции иэ одной вершины. Здесь нужен специальный алгоритм. И он существует. Суть его следующая:

- берутся две соседние вершины многоугольника, например 1 и 8 (рис.48) .

Рис. 46 Неправильная декомпозиция

берутся их соседние вершины. Для т.8 - это вершина 7, а для т.1 - это вершина 2.

проводятся возможные диагонали. Для т.8 - это 8-2, а для т. 1 это 1-7.

иэ этих двух диагоналей выбирается кратчайшая. "Побеждает" диагональ 1-7, проведенная иэ вершина 1, а вершина 8 иэ дальнейшего рассмотрения выпадает.

вместо выпавшей вершины "встает" ее соседка (вершина 7) и алгоритм повторяется для другой пары вершин 1 и 7.

так далее, пока все вершины не будут исчерпаны.

Шаг

Рассматриваемые

Рассматриваемые

Кратчайшая

Выпадающая

вершины

диагонали

диагональ

вершина

1

8,1

1-7, 8-2

1-7

8

2

7,1

7-2, 1-6

7-2

1

3

7,2

7-3, 2-6

2-6

7

4

6,2

6-3, 2-5

6-3

2

5

6,3

6-4, 3-5

6-4

3

<4

3

~ ~ - - , _ _

/

5

6

N

8

7

1

ч 1

_ _ -

1

2

Рис. 48 Алгоритм декомпозиции сложной фигуры

Как видите, этот путь позволяет проводить автоматическую декомпозицию сложных фигур на треугольники. Если в программе очень много плоских фигур (граней тел) и они непрерывно меняют

свою форму, то вручную делать декомпозицию на треугольники не %

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

Принцип фиктивных ребер. Это еще один полезный прием, который часто применяют в векторной графике

С полыми телами при описанной выше технологии лучше дел не иметь, но иногда все-таки это может быть необходимым. Как же поступать, если такая задача стоит и обойти ее не удается, см. например объект на рис. 49.

8

6

Рис. 49 Описание полого объекта.

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

1,2,3,4,5,6,7,-12,13,14,15,12,-7,8,9,10,11

Программа должна сама разобраться, что если стоит "минус".

то сторону рисовать не надо, а надо просто перейти к новой координате .

С помощью такого приема можно изображать не только внутренние полости, но и просто отрезки прямых, например декоратив ные. Обратите также внимание на особенность порядка обхода точек во внутреннем отверстии: 12,13,14,15. Как Вы видите, они обходятся по часовой стрелке, хоть и лежат на видимой поверхности. Дело в том, что наше правило обхода "против часов", которое мы ввели выше, было неполным. Движение должно осуществляться такин образом, чтобы при движении от предыдущей лючки к последующей, "тело" фигуры оставалось бы слева. Для внешних контуров это и дает обход против часовой стрелки, но для внутренних (хоть и видимых) движение оказывается "по часам"

Использование фиктивных ребер может значительно расширить Ваши возможности по изображению трехмерных тел.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Застрял ? - Вторая часть "подсказок из подземелья" (The Bards of Tale).
Обзор - хиты сезона'1996: обзор работ с Enlight 1996.
От редакции - мне пpислали новую плату контpоллеpа пpинтеpа МС 6312.
Эврика - Маленький саммит во Львове.
Разборочка с геймочкой - разбор игры "Земля заклинателей" (Magicians Land).

В этот день...   26 апреля