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

ALL

.pdf
Скачиваний:
240
Добавлен:
12.02.2018
Размер:
15.74 Mб
Скачать
x = R sin s cos t, y = R sin s cos t, z = R cos s,

Методы и алгоритмы трехмерной графики

Модели описания поверхностей

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

Аналитическая модель

Это описание поверхности математическими формулами. В КГ используют много разновидностей такого описания. Например, в виде функции двух аргументов z = f(х, у). Можно использовать уравнение F (х, y, z) = 0.

Параметрическая форма описания поверхности. Формулы для трехмерной декартовой системы координат (х, у, z).

х = Fх (s, t),

y = Fy (s, t),

z = Fz (s, t),

где s и t — параметры, которые изменяются в определенном диапазоне. Функции Fх , Fy, и Fz будут определять форму поверхности.

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

z R2 x2 y2

Пример: рассмотрим аналитическое описание поверхности – шар.

Сначала как функцию двух аргументов:

Затем в виде уравнения: x2 + y2 + z2 – R2 =0.

А также в параметрической форме:

Методы и алгоритмы трехмерной графики

Для описания сложных поверхностей часто используют сплайны.

Сплайн – это специальная функция, более всего пригодная для аппроксимации отдельных фрагментов поверхности. Несколько сплайнов образовывают модель сложной поверхности.

Обычно используют кубические сплайны.

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

Сплайны часто задают параметрически.

Запишем формулу для компоненты х(s,t) кубического сплайна в виде многочлена третьей степени параметров s и t:

х(s,t) = а11 s3t3 + а12 s3t2 + а13 s3t + а14 s3 +

+ а21 s2t3 + а22 s2t2 + а23 s2t + а14 s2 +

+ а31 st3 + а32 st2 + а33 st + а34 s +

+ а41 t3 + а42 t2 + а43 t + а44

В математической литературе можно ознакомиться со способами определения

коэффициентов аij для сплайнов, которые имеют заданные свойства. Примеры анализа и синтеза сплайнов в матричной форме приведены в [19, 28].

Методы и алгоритмы трехмерной графики

Рассмотрим одну из разновидностей сплайнов— сплайн Безье. Приведем его сначала в обобщенной форме — степени т х п [19]:

,

где Рij опорные точки-ориентиры, 0 s 1, 0 t 1,aС!!im и Сjn — коэффициенты биномаbНьютона, они рассчитываются по формуле:

 

Ca

 

 

b!(a b)!

Кубический сплайн Безье - т = 3, n = 3. Для его определения необходимо 16 точек-ориентиров Рij (рис,); коэффициенты Сim, Сjn равны 1,3,3,1 при i,j = 0,1,2,3.

Аналитическая модель в целом наиболее пригодна

для многих операций анализа поверхностей.

Положительные черты модели:

1. легкая процедура расчета координат каждой точки

поверхности, нормали;

2.

небольшой объем информации для описания

 

достаточно сложных форм.

 

Недостатки :

Рис. Кубические сплайны Безье

1.сложные формулы описания с использованием функций, которые медленно вычисляются на компьютере, снижают скорость выполнения операций отображения;

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

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

Векторная полигональная модель

Для описания пространственных объектов здесь используются такие элементы: вершины;

отрезки прямых (векторы), полилинии, полигоны, полигонаные поверхности (рис.).

Элемент "вершина" (vertex) — главный элемент описания, все другие являются производными. При использовании трехмерной декартовой системе координаты вершин определяются как (x, y, z). Каждый объект однозначно определяется координатами собственных вершин.

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

Рис. Базовые элементы векторно-полигональной модели

Двумя вершинами задается вектор. Несколько векторов составляют полилинию.

Полилиния может моделировав отдельный линейный объект, толщина которого не учитывается, а также может представлять контур полигона.

Полигон моделирует площадный объект. Один полигон может описывать плоскую грань объемного объекта.

Несколько граней составляют объемный объект в виде полигональной поверхности — многогранник или незамкнутую поверхность (в литературе часто употребляется название "полигональная сетка"),

Методы и алгоритмы трехмерной графики

Векторная полигональная модель наиболее распространена в современных системах трехмерной КГ. Ее используют в системах автоматизированного проектирования, в компьютерных играх и тренажерах, в САПР, геоинформационных системах и т. д.

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

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

Первый способ. Сохраняем все грани в отдельности (рис.)

Рис.. Первый способ описания куба

Грань A = {(XA0, YA0 , ZA0), (XA1, YA1 , ZA1), (XA2, YA2 , ZA3), (XA3, YA3 , ZA3)}

Грань B = {(XB0, YB0 , ZB0), (XB1, YB1 , ZB1), (XB2, YB2 , ZB3), (XB3, YB3 , ZB3)}

Грань C = {(XC0, YC0 , ZC0), (XC1, YC1 , ZC1), (XC2, YC2 , ZC3), (XC3, YC3 , ZC3)}

Грань D = {(XD0, YD0 , ZD0), (XD1, YD1 , ZD1), (XD2, YD2 , ZD3), (XD3, YD3 , ZD3)}

Грань E = {(XE0, YE0 , ZE0), (XE1, YE1 , ZE1), (XE2, YE2 , ZE3), (XE3, YE3 , ZE3)}

Грань F = {(XF0, YF0 , ZF0), (XF1, YF1 , ZF1), (XF2, YF2 , ZF3), (XF3, YF3 , ZF3)}

Методы и алгоритмы трехмерной графики

Схематично это можно изобразить на рис.

Рис.. Отдельные грани

В компьютерной программе такой способ описания объекта можно реализовать разнообразно.

Например, для каждой грани открыть в памяти отдельный массив.

Можно все грани записывать в один массив-вектор.

А можно использовать классы (языком С++) как для описания отдельных граней, так и объектов в целом.

Можно создавать структуры, которые объединяют тройки (x, y, z) или сохранять координаты отдельно.

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

Рассчитать объем памяти, необходимый для описания куба следующим образом:

П1 = 6 4 Рч

где Рч – разрядность чисел, необходимая для представления координат.

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

Методы и алгоритмы трехмерной графики

Рис. Номера вершин

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

Оценим затраты памяти:

П2 = 8 3 Рв + 6 4 Риндекс

где Рв – разрядность координат вершин, Риндекс – разрядность индексов.

Третий способ описания (рис.).

Этот способ (в литературе его иногда называют линейно-узловой моделью) основывается на иерархии: вершины – ребра – грани.

Оценим затраты памяти:

П3 = 8 3 Рв + 12 2 Ринд.вершин + 6 4 Ринд. ребер

где Рв – разрядность координат, Ринд.вершин и Ринд. ребер – разрядность индексов вершин и ребер соответственно.

Методы и алгоритмы трехмерной графики

Рис.. Линейно-узловая модель

Для сравнения объемов памяти этих трех вариантов необходимо определиться с разрядностью данных.

Пусть разрядность координат и индексов составляет четыре байта. Например, тип чисел с плавающей точкой float для координат и целому типу long для индексов. Тогда затраты памяти в байтах составляют:

П1= 6х4х3х4= 288,

П2= 8х3х4+6х4х4= 192,

П3= 8х3 х4+ 12х2х4+6х4х4=288.

Пусть для координат отведено 8 байтов (тип с плавающей точкой double), а для индексов — 4 байта. Тогда:

6х4х3х8=576,

8х3х8 +6х4х4 ==288,

8х3х8 +12х2х4+6х4х4= 384.

Методы и алгоритмы трехмерной графики

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

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

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

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

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

При этом решаем проблему искажения стиля линий, если линии контуров не сплошные.

Топологический аспект. Представим, что имеется несколько смежных граней. Что будет, если изменить координаты одной вершины в структурах данных? Результат приведен на рис..

Методы и алгоритмы трехмерной графики

Первый, второй и третий варианты

Рис. Результат изменения координат одной вершины

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

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

варианту. Можно предусмотреть поиск других вершин, координаты которых совпадают с координатами точки A.

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

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

Соседние файлы в предмете Компьютерная Графика