Всего на сайте:
282 тыс. 988 статей

Главная | Информатика

РЕАЛИСТИЧНЫЕ 3D-ИЗОБРАЖЕНИЯ  Просмотрен 75

С.Ф. Егоров

Методические указания
«РЕАЛИСТИЧНЫЕ 3D-ИЗОБРАЖЕНИЯ»

к выполнению лабораторных работпо дисциплинам

«Инженерная и компьютерная графика 2»

и «Компьютерная графика»

Рекомендовано учебно-методическим советом ФГБОУ ВО
«ИжГТУ имени М.Т. Калашникова» для использования в учебном процессе
в качестве методических указаний для студентов, обучающихся

по направлению 09.03.01 - Информатика и вычислительная техника
(бакалавриат, профиль: вычислительные машины, комплексы, системы и сети)
(бакалавриат, профиль: автоматизированные системы обработки информации и управления)
(бакалавриат, профиль: системы автоматизированного проектирования)

по направлению 10.05.03 - Информационная безопасность автоматизированных систем
(специалитет, специализация «Защищенные автоматизированные системы управления)


1. Преобразования, связанные с системой координат

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

Введем три вида систем координат. Первая из них – мировая система координат – задается осями . Мы размещаем ее в некоторой точке, и она остается неподвижной всегда. Вторая – система координат наблюдателя. Эту систему назовем . Она определяет положение наблюдателя в пространстве и задает направление взгляда. И третья – система координат объекта (начало координат проходит через центр основания объекта или через центр масс). В нашем случае их две: система координат локатора и система координат танка. Эти системы также могут перемещаться и изменять свое положение в пространстве относительно мировой системы координат. Координаты точек объектов задаются в системах координат объектов, каждая из которых, в свою очередь, привязана к мировой системе координат. Система координат наблюдателя также перемещается относительно мировой системы координат. Для того чтобы увидеть трехмерный объект на экране компьютера, надо проделать следующие шаги.

1. Преобразовать координаты объекта, заданные в собственной (локальной) системе координат, в мировые координаты.

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

3. Спроецировать полученные координаты на проекционную плоскость в системе координат наблюдателя.

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

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

 

 

1.1. Двумерные матричные преобразования

Рассмотрим преобразования координат точек на плоскости. На рис. 1 точка перенесена в точку .

Рис. 1. Операция переноса или трансляции точки в точку

 

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

.

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

Рис. 2. Операция масштабирования

 

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

Для точек и операция масштабирования в матричном виде будет выглядеть следующим образом:

.

 

Рассмотрим далее операцию вращения (поворота) точки на некоторый угол относительно начала координат. На рис. 3 точка переходит в точку поворотом на угол . Перейдем в полярную систему координат:

и .

Рис. 3. Операция поворота точки на угол

 

Найдем преобразование координат точки А в точку В. Обозначим угол, который составляет радиус-вектор с осью Оx, а r – длина радиус-вектора , тогда:

;

.

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

;

.

В матричном виде вращение точки А на угол выглядит следующим обра­зом:

.

 

 

1.2. Однородные координаты и
матричное представление двумерных преобразований

Ранее были рассмотрены три вида преобразований точек на плоскости. Два из них – операции вращения и масштабирования ‑ описываются в виде произведения матрицы на вектор, а третья – операция переноса – описывается как сумма двух векторов. В случае последовательного выполнения любой комбинации операций вращения и масштабирования результат легко можно записать в виде произведения матриц соответствующих преобразований. Это будет матрица результирующего поворота и масштабирования. Очевидно, что удобнее применять результирующую матрицу вместо того, чтобы каждый раз заново вычислять произведение матриц. Однако таким способом нельзя получить эту результирующую матрицу преобразования, если среди последовательности преобразований присутствует хотя бы один перенос. Матричное произведение в компьютерной графике также называют композицией. Было бы удобнее иметь математический аппарат, позволяющий включать в композиции преобразований все три выше указанные операции. При этом получился бы значительный выигрыш в скорости вычислений. Однородные координаты и есть этот математический аппарат.

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

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

Рассмотрим некоторые свойства однородных координат. Некоторые точки, не определенные в n-мерном пространстве, становятся вполне определенными при переходе к однородным координатам.

Например, однородный вектор в трехмерном пространстве соответствует бесконечно удаленной точке . Поскольку в однородных координатах эту точку можно представить в виде , при , то в трехмерном пространстве это соответствует точке .

Рассмотрим точку трехмерного пространства . Если представить эту точку как однородное представление точки двумерного пространства, то ее координаты будут . Легко заметить, что двумерное представление точки с координатами выглядит как ее проекция на плоскость , как показано на рис. 4.

Рис. 4. Проекция точки на плоскость

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

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

.

Эта матрица определяет преобразование точки объекта, заданной в одно­родных координатах, в точку перспективной проекции (также в однородных координатах). Пусть – точка в трехмерном пространстве. Ее однородное представление . Умножим v на P:

.

Теперь точки двумерного пространства будут описываться трехэлемент­ными векторами-строками, поэтому и матрицы преобразований, на которые будет умножаться вектор точки, будут иметь размеры 3´3. Запишем матричное преобразование операции переноса для однородных координат:

или , где .

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

.

 

Запишем матричный вид операции масштабирования:

.

Определим матрицу масштабирования .

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

.

 

Для операции поворота матричный вид будет такой:

.

Определим матрицу поворота .

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

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

Таким образом, с помощью композиции матричных преобразований можно получить одно общее результирующее преобразование. Для этого будем использовать матрицы T, S и R. С вычислительной точки зрения гораздо проще и быстрее применять матрицу уже готового результирующего преобразования к точке вместо того, чтобы применять их последовательно одну за другой.

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

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

Вот эта последовательность элементарных преобразований (рис. 5):

1. Перенос, при котором точка переходит в начало координат.

2. Поворот на заданный угол.

3. Перенос, при котором точка из начала координат возвращается в первоначальное положение .

Рис. 5. Последовательность преобразований при повороте объекта
вокруг точки на угол a

 

Точка . Первый перенос производится на вектор Т , поворот на R(a), а обратный перенос ‑ на вектор Т (Т-1).

 

1.3. Трехмерные матричные преобразования

Подобно тому как двумерные преобразования описываются матрицами размером , трехмерные преобразования могут быть представлены матрицами размером . Тогда трехмерная точка записывается в однородных координатах как , где . Для получения декартовых координат надо первые три однородные координаты разделить на . Два однородных вектора описывают одну декартову точку в трехмерном пространстве, если , где и - векторы, записанные в однородных координатах.

Матрицы преобразований будем записывать в правосторонней системе ко­ординат. При этом положительный поворот определяется следующим образом. Если смотреть из положительной части оси вращения (например, оси ) в направлении начала координат, то поворот на 90° против часовой стрелки будет переводить одну положительную полуось в другую (ось в , в соответствии с правилом циклической перестановки).

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

Запишем теперь матрицу трехмерного переноса. Аналогично двумерному случаю: , при этом

.

Операция масштабирования:

,

.

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

Матрица поворота вокруг оси имеет вид:

,

и вокруг оси (обратите внимание на смену положения синуса угла с отрицательным знаком): .

 

Обратные преобразования (т.е. приводящие к противоположным действиям) будут выражаться обратными матрицами. Для операции переноса надо лишь заменить знаки компонент вектора переноса на противоположные:

;

для операции масштабирования – на обратные значения:

;

для поворота – выбором отрицательного угла поворота:

;

не забываем, что cos(-a)=cos(a), а sin(-a)=-sin(a).

Результатом нескольких последовательных поворотов будет матрица

.

Здесь верхняя матрица размером (В) называется ортогональной. Важным ее свойством является то, что обратная к ней матрица является транспонированной: . Это полезно тем, что при вычислениях достаточно поменять индексы местами и обратное преобразование получается автоматически.

После перемножения любого числа матриц вида и результирующая матрица всегда будет иметь вид

.

Здесь верхняя часть размером определяет суммарный поворот и масштабирование, а три коэффициента последней строки – суммарный перенос. Правая подматрица 3х1 отвечает за проецирование (как правило, не нулевым является лишь один элемент) на соответствующую плоскость.

 

Предыдущая статья:Алгоритмы устранения мерцания спрайтов Следующая статья:Алгоритмы удаления скрытых линий и поверхностей
page speed (0.0259 sec, direct)