Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Компьютерная графика и геометрическое моделирование в информационных системах. Учебное пособие для бакалавров направлений подготовки 230100 «Информати.pdf
X
- •ВВЕДЕНИЕ
- •5. ПРОЕЦИРОВАНИЕ ТРЁХМЕРНЫХ ОБЪЕКТОВ
- •6. РАСТРОВОЕ ТЕКСТУРИРОВАНИЕ
- •10. МОДЕЛИ ОСВЕЩЕНИЯ
- •12. ВОСПРОИЗВЕДЕНИЕ КРИВЫХ
- •12.1. ИНТЕРПОЛИРОВАНИЕ С ПОМОЩЬЮ МНОГОЧЛЕНОВ
- •12.2. МНОГОЧЛЕНЫ БЕЗЬЕ
- •12.3. ПАРАМЕТРИЧЕСКИЕ КУБИЧЕСКИЕ КРИВЫЕ
- •13.1. ФОРМА ЭРМИТА
- •12.5. СРАВНЕНИЕ КРИВЫХ ЭРМИТА, БЕЗЬЕ И B-СПЛАЙНОВ
- •13.2. ФОРМА БЕЗЬЕ
- •13.3. ФОРМА B-СПЛАЙНОВ
- •14. ПРИБЛИЖЕНИЕ И ВОСПРОИЗВЕДЕНИЕ ПОВЕРХНОСТЕЙ
- •14.2. ПЛАЗОВЫЕ ПОВЕРХНОСТИ
- •14.3. ПОВЕРХНОСТЬ КУНСА
- •14.4. ПОСТРОЕНИЕ ПОВЕРХНОСТЕЙ ПО ОРИЕНТИРАМ
- •16. МОДЕЛИРОВАНИЕ ГЕОМЕТРИЧЕСКИХ ФОРМ
- •16.1. МЕТОДЫ ПОСТРОЕНИЯ МОДЕЛЕЙ
- •16.2. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ МОДЕЛЕЙ
- •16.3. ДВУМЕРНОЕ МОДЕЛИРОВАНИЕ
- •16.4. ТРЁХМЕРНОЕ МОДЕЛИРОВАНИЕ
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ЛИТЕРАТУРЫ

Вышеприведённый алгоритм аффинного точечного текстурирования справедлив только для аксонометрических проекций трёхмерных объектов. Для перспективного текстурирования необходимы дополнительные математические операции, связанные с центральным
проецированием [5].
Одна из проблем текстурирования полигонов заключается в том,
что после геометрических преобразований (поворотов, изменений
размеров и т.п.) растровых образцов происходит ухудшение качества
«картинки» конечного резу
льтата текстурированной области. Возможно появление ступенчатости (aliasing) на границах текстур после
поворотов объекта, укрупнения пикселей, после увеличения геометрической модели, а уменьшение размеров растра обычно приводит к
потере многих пикселов образца текстуры, что проявляется в виде
муара. Для улучшения эстетического восприятия текстурованных
изображений применяют всевозможные методы фильтрации (интерполяции) растров текстур.
Рассмотрим наиболее эффективную фильтрацию текстур – били-
нейную фильтрацию. В данном методе видовое (цвет, яр
кость) значение точки текстурируемого полигона выбирается не из ближайшего
текселя текстуры, а за три прохода линейной интерполяции из блока
четырёх соседних текселей (рис. 6.2). Благодаря чему, повышается
аккуратность при выборе цвета (яркости) пикселя и достигается лучшая прорисовка отдельных мелких деталей изображения.
Предположим, в процессе аффинного текстурирования полигона
были определены ко
ординаты текселя T, как xt и yt (рис. 6.2). Из ри-
Рис. 6.2. Билинейная фильтрация текстуры
21

сунка видно, что текстурные точки C00, C10, C
−
+
и C11 являются сосед-
01
ними точками в текстуре по отношению к вычисленной точке T. Следует заметить, что такой точки в пространстве целочисленных координат текселей не существует, так как её положение задаётся вещественными значениями. Реальные координаты «соседних» точек в текстуре
определяются как: C
= [xt] + 1, [yt] + 1. В формулах [xt] и [yt] соответствуют значениям
C
11
= [xt], [yt]; C10 = [xt] + 1, [yt]; C01 = [xt], [yt] + 1 и
00
целых чисел вещественных значений без их дробных частей. Например, для вычисления координат точки C
дробную часть у x
Значение точки A можно определить как:
A
то
x
t
и yt.
t
A
x
t
−
CC
10
k
=
−
CC
1000
хх
−+
1][
хх
−+
=> ,)(
A
tt
k
=
A
][1][
tt
)1])([( CххCCC
+−+−= .
tt
A
x
t
=>
101000
необходимо отбросить
00
k
+−= (6.1)
CCC
= 1][ , (6.2)
C
101000
A
xxk
ttA
В выражении 6.1 коэффициент линейной интерполяции указывает
на изменение интенсивности точки A по отношению к текселю C
10
Это изменение пропорционально отношению расстояния от точки А до
текселя C
к единичному расстоянию между соседними текселями.
10
Аналогично вычисляют точки В и Т (вывод выполнить самостоя-
тельно).
Вычисленные таким образом видовые атрибуты точки будут яв-
ляться целью билинейной фильтрации текстурирования.
Под видовыми атрибутами текселей C
следует понимать значе-
ij
ние интенсивности по основным цветам цветовой модели R, G и B.
Иногда для улучшения качества текстурирования используют
сразу несколько образцов текстур для различных масштабов
(mipmaps). И в зависимости от рабочего масштаба показа графического
объекта для тектуры выбирается наиболее близкий по качеству (масштабу) растровый образец.
Одной из проблем связанных с хранением текстур является требование к объёму памяти текстурных хранилищ в компьютере. Для
сокращения подобной памяти можно использовать методику блочного
текстурирования. В данном случае заявленная текстура не предп
олагает заполнить весь полигон целиком, а лишь отдельную часть, которая
циклически повторяется в многоугольнике.
22
.

7. АЛГОРИТМ «ПЛАВАЮЩЕГО ГОРИЗОНТА»
ДЛЯ ВИЗУАЛИЗАЦИИ ФУНКЦИОНАЛЬНО-
ЗАДАННЫХ ПОВЕРХНОСТЕЙ
Компьютерная графика позволяет простым способом увидеть на
экране монитора поверхность функции, заданной в виде F(x, y, z) = 0 с
эффектом удаления невидимых участков. Для этого был разработан
специальный алгоритм «плавающего горизонта» [2], где трёхмерная
задача трансформируется в двумерную за счёт фиксации одной координаты (обычно Z). Графически такую подмену можно представить,
как пересечение исх
например, оси Z. Секущих плоскостей выбирается несколько в зависимости от разрешающей способности растра вывода. Совокупность
кривых, лежащих в этих плоскостях, формируют зрительный образ
поверхности (рис. 7.1).
Как правило, функцию F(x, y, z) = 0 приводят к виду y = f(x, z), где
z – константа.
Если построить проекцию по
(рис. 7.2), то можно наблюдать поверхность функции, но без удаления
невидимых участков.
о
дной поверхности параллельной плоскостью,
лученных кривых на плоско
сть z = 0
Рис. 7.1. Кривые в секущих плоскостях
Рис. 7.2. Проекция кривых на плоскость Z = 0
23

Процесс построения поверхности заданной функции начинается с
ближайшего пересечения с плоскостью Z по отношению к точке наблюдения. Строится «след» пересечения плоскостью Z поверхности,
для этого каждому значению координат х в пространстве изображения
определяется соответствующее значение y.
Непосредственное удаление невидимых участков кривых заключается в следующем: если для текущей «секущей» плоскости для некото
рог
о заданного значения x соответствующее значение у на кривой
больше значения y для всех предыдущих кривых при этом значении x,
то текущая точка кривой видна; в противном случае она невидима.
На практике для хранения кривых максимальных значений y (текущих значений «горизонта») используется одномерный массив, длина
которого равна горизонтальному размеру растра визуализации. В этот
массив всегда записываются наибо
л
ьшие (!) значения y для фиксированного x. Поэтому по мере занесения новых y и рисования каждой
очередной кривой этот горизонт как бы «всплывает». Таким образом,
каждый раз этот алгоритм работает с одной кривой.
Вышепредставленный алгоритм работает логично до тех пор, по-
ка вычисленный y на очере
дной кривой будет
меньше значения y для
самой первой кривой из построенных для фиксированного x.
Такие участки кривых, естественно, должны быть видны и представляют собой нижнюю сторону исходной поверхности. Но первоначальная форма алгоритма такой участок скроет от наблюдения, так как
значение y на кривой будет меньше максимального значения для те-
кущего x. Ни
жнюю ст
орону поверхности можно увидеть, если дополнить этот алгоритм «нижним горизонтом», включив в него массив минимальных значений y для фиксированных x. Эти значения «опуска-
ются» вниз во время работы полного алгоритма. Массив «нижнего
горизонта» имеет аналогичный тип описания в программе, как и массив «верхнего горизонта».
Рис. 7.3. Пример работы алгоритма «плавающего горизонта»
24

Таким образом, алгоритм словесно можно записать, как: если на
текущей плоскости (Z = сonst) при некотором значении x соответст-
вующее значение y на кривой больше максимального значения y или
меньше минимума значения y для всех предыдущих кривых при том
же x, то текущая точка кривой видна. В противном случае нет.
Пример поверхности функции
y = (1/5) sin(x) cos(z) – (3/2) cos(7a/4) × e–a,
где a = (x – π)2 + (z – π)2, изображённой в интервале (0, 2π) по x и z,
представлена на рис. 7.3.
8. АЛГОРИТМ УДАЛЕНИЯ НЕВИДИМЫХ ГРАНЕЙ,
В процессе визуализации полигональных 3D-объектов компью-
терного моделирования приходится решать множество задач компьютерной графики, одной из которых является удаление невидимых граней трёхмерного объекта относительно камеры наблюдения.
Существует большое количество алгоритмов удаления невидимых граней в трёхмерной графике [1 – 4]. Но наибольшее внимание
заслуживают алгоритмы, работающие в реальном времени и с большим количест
использующий BSP-дерево (Binary Space Partition – двоичное разбиение пространства) [6]. Для данного алгоритма под BSP-деревом понимается пространственное взаимоотношение полигонов моделей трёхмерных объектов.
Рассмотрим подробнее алгоритм удаления невидимых граней с
использованием BSP-дерева. Пусть некоторая плоскость, содержащая
один из полигонов трёхмерного объекта, делит множество полигонов
сцены на два подмн
из подмножеств. Подмножество полигонов, не содержащее наблюдателя, очевидно, не может экранировать полигоны из подмножества с
наблюдателем. Каждое полученное подмножество опять разобьём на
части плоскостью полигона, находящегося в этом подмножестве. Подобный процесс разбиения продолжается до тех пор, пока в подмножестве не останется оди
подмножества выполняется рекурсивно с одновременным формированием BSP-дерева. В качестве узлов данного дерева будут полигоны,
плоскости которых делят полигоны 3D-сцены на подмножества полигонов, а ветви – соответствующие подмножества. Листьями BSPдерева будут полигоны, для которых не осталось множеств полигонов
для дальнейшего разбиения.
В качестве ра
которая делит пространство без рассечения других полигонов. В слу-
ИСПОЛЬЗУЮЩИЙ BSP-ДЕРЕВО
лигонов. К такому алгоритму относится алгоритм,
вом по
жества. Наблюдатель может находиться в одном
о
лигон. На практике деление сцены на
н по
ссекающей пл
оскости обычно выбирают плоскость,
25

чае, если рассечение полигона неизбежно, вместо одного рассеченного
полигона в трёхмерную модель заносят два его фрагмента.
Расположения полигонов по отношению к плоскости деления
можно определить, воспользовавшись тестовой функцией – TF(x, y, z),
которая имеет вид TF = Ax + By + Cz + D, где A, B, C, D – коэффициенты уравнения плоскости деления; x, y, z – ко
точки в
пространстве трёхмерного объекта.
ординаты анализируемой
Для каждой вершины анализируемого полигона вычисляем TF.
Если величина тестовой функции в анализируемой точке больше (равна) 0, это указывает на то, что точка расположена справа относительно
плоскости деления. В противном случае – точка расположена слева.
Если для всех трёх точек полигона имеется один знак тестов
ой фун
кции, то это означает, что полигон целиком находится по одну из сторон секущей плоскости. При разных знаках тестовой функции полигон
рассекается плоскостью деления подмножеств полигонов.
Растровый показ полигонов трёхмерной сцены с использованием
BSP-дерева заключается в рекурсивном обходе дерева от «передних
ветвей» к «задним» согласно следующей схеме:
1.
Начиная с корневого узла дерева, определяем положение на-
блюдателя относительно плоскости полигона данного узла.
2.
Дальше всего от камеры находятся полигоны, расположенные
с дальней стороны рассекающей плоскости (узлового полигон), поэтому начинаем вывод подмножества подобных полигонов, т.е. противоположную ветвь дерева.
3.
После чего выводим узловой полигон.
4.
В последнюю очередь выводим в растр ветвь подмножества
полигонов, в которой находится камера наблюдения.
5.
Рекурсивно повторяем шаги 1 – 4 для каждого узла BSP-дерева
3D-объекта до тех пор, пока не осуществим вывод всех полигонов сцены.
Построение BSP-дерева может начинаться с любого полигона,
выбранного в качестве корневого узла. Но исследование построения
дерева показало, что вид дерева меняется в зависимости от того, какой
полигон будет выбран в качестве корневого. Вид де
ва влияет на эф-
ре
фективность процесса обработки его «ветвей» и «листьев» при построении изображения.
Многочисленные исследования построения BSP-деревьев 3D-объекта показали, что стремление получить сбалансированное дерево, как
правило, приводит к разрастанию модели данных сцены за счёт деления полигонов на составные части секущими плоскостями узловых
полигонов дерева.
Для р
ешения задачи оп
ределения полигонов в качестве разделяющих пространство трёхмерной модели предлагается простая методика. Рассмотрим её основные шаги.
26

Допустим, что каждый полигон трёхмерного объекта может быть
разделяющим полигоном. Тогда для каждого такого полигона строится
структура данных состояния поделённых полигонов трёхмерной модели со следующими полями:
−
количество полигонов, находящихся левее данного [«–»];
−
количество полигонов, находящихся правее данного [«+»];
−
количество пересечений полигонов сцены с плоскостью дан-
ного полигона [«Кол. пересечений»];
−
значение разности по модулю первого и второго параметра
[abs(«–» – «+»)].
Подобную структуру данных заносят строкой в таблицу, строки
которой соответствуют полигону деления множества полигонов трёхмерной модели.
Последний параметр строки таблицы [abs(«–» – «+»)] указывает
на сбалансированность дерева.
Характеристика расположения полигонов, как «левее» и «правее», чисто условная, так как истинную роль здесь играет знак пробно
функции TF(x, y, z) плоскости разделения, куда подставляем зна-
й
чения координат вершин анализируемых полигонов.
Подобные таблицы строятся для каждого подмножества полигонов, из которого выбираем полигон с минимальным значением поля
[abs(«–» – «+»)] и [«Кол. пересечений»]. Выбранные полигоны будут
узловыми полигонами строящегося BSP-дерева. Процесс деления полигонов на подмножества завершается, когда в таблице состояний останутся всего два по
лиго
на.
Рассмотрим пример трёхмерного объекта для построения BSPдерева и состоящего из четырёх полигонов: 1, 2, 3 и 4 (рис. 8.1).
Рис. 8.1. Пример пространственной сцены
27

№ полигона «–» «+» Кол. пересечений abs(«–» – «+»)
Таблица 8.1
1 0 3 0 3
2 2 3 2 1
3 2 1 0 1
4 3 0 0 3
Для формирования «корня» BSP-дерева заполним таблицу состояний полигонов в сцене (табл. 8.1).
В данной таблице наиболее близко для корневого сегмента BSPдерева подходят полигоны 2 и 3. Для симметричности дерева подходит
полигоном 2, как корневой, но в этом случае придётся разбивать два
полигона (1 и 3) на части. Следовательно, выбираем полигон 3, так как
он не предполагает рассечение самих по
Если выявя
тся в таблице полигоны с одинаковыми значениями
лигонов.
четвёртого столбца – [abs(«–» – «+»)], то выбираем из них полигон,
для которого значение поля [«Кол. пересечений»] минимальное.
Такие таблицы формируются для каждого левого и правого подмножества полигонов относительно выбранного узлового полигона.
По аналогичной схеме определяются узловые полигоны. В данном
случае в левом подмножестве останется по
лиго
н 1 и 2, а в правом 4.
Для полигонов 1 и 2 вновь строим таблицу состояний (табл. 8.2).
Анализируя значение поля [«Кол. пересечений»], выбираем
полигон 1.
На этом процесс разбиения подмножеств полигонов трёхмерного
объекта завершается. Одновременно с построением таблиц строятся
BSP-деревья. Для приведённого примера возможны три структуры
BSP-дерева (рис. 8.2). Из трёх представленных вариант 3 наиболее
пр
иемлемый
.
Особенность BSP-дерева в алгоритме удаления невидимых граней
трёхмерного объекта заключается в том, что все построения бинарного
дерева осуществляются предварительно на этапе, не связанном
с выводом в растр объекта. А в процессе визуализации трёхмерной графической модели BSP-дерево используется как указатель
№ полигона «–» «+» Кол. пересечений Abs(«–» – «+»)
1 0 1 0 1
2 1 0 1 1
Таблица 8.2
28

Рис. 8.2. Возможные варианты BSP-дерева
на последовательность вывода полигонов. Работа с подобным указателем – процесс быстрый и не требует сложных математических расчётов. Любое изменение положения камеры наблюдения в пространстве
трёхмерной сцены, где расположен объект вывода, не влияет на организацию BSP-дерева трёхмерной модели и не отражается на производительности системы в целом. В рамках анимации трё
х
мерных объектов не требуется для каждого нового кадра заниматься сортировкой
полигонов, так как в BSP-дереве всё это уже выполнено.
9. АЛГОРИТМ ОПРЕДЕЛЕНИЯ ВИДИМЫХ
ПОВЕРХНОСТЕЙ ПУТЁМ ТРАССИРОВКИ ЛУЧЕЙ
Основная идея, лежащая в основе алгоритма прямой трассировки
лучей, заключается в том, что наблюдатель (камера) видит 3D-объект
посредством испускаемого света неким источником, который падает
на этот объект и затем каким-то образом доходит до наблюдателя. Луч
может достичь наблюдателя, отразившись от поверхности, преломившись или пройдя через неё. Лишь малая часть подобных лучей, выпущенных источнико
м света, дойдут до наблюдателя. Подобный ал
ритм отслеживания лучей вычислительно неэффективен даже при современных параметрах вычислительной техники. Аппель [2] первым
предложил отслеживать (трассировать) лучи в обратном направлении,
т.е. от наблюдателя к объекту, как показано на рис. 9.1. Исследователи
Кэй и Уиттед [2] реализовали алгоритмы обратной трассировки лучей
го-
29

Рис. 9.1. Простая трассировка луча
и сформировали общую модель освещения. Эти алгоритмы учитывают
эффекты отражения одного объекта от поверхности другого, преломления, прозрачности и затенения.
Рисунок 9.1 служит иллюстрацией алгоритма трассировки лучей.
В этом алгоритме предполагается, что сцена уже преобразована в пространство изображения. Перспективное преобразование не используется. Считается, что точка зрения или наблюдатель находится в бесконечности на положительной полуоси z. Поэтому все световые лучи
параллельны оси z. Каждый луч, исходящий от наблюдателя, проходит
через центр пиксела на растре до сцены. Траектория каждого луча отслеживается, чтобы определить, какие именно объекты сцены, если
таковые существуют, пересекаются с данным лучом. Необходимо проверить пересечение каждого объекта сцены с каждым лучом. Если луч
пересекает объект, то определяются все во
зможные точ
ки пересечения
луча и объекта. Можно получить большое количество пересечений,
если рассматривать много объектов. Эти пересечения упорядочиваются по глубине. Пересечение с максимальным значением z представляет
видимую поверхность для данного пиксела. Атрибуты этого объекта
используются для определения характеристик пиксела.
Если точка зрения находится не в бесконечности, алгоритм трассировки лучей лишь незначительно усложняется. Здесь предполагается, что наблюдатель по-прежнему находится на положительной полуоси z. Картинная плоскость, т.е. растр, перпендикулярна оси z, как показано на рис. 9.2. Задача состоит в том, чтобы построить одноточечную центральную проекцию на картинную плоскость.
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
