Лекция 2 Аффины. 7 Двумерные геометрические (аффинные) преобразования 7 - umotnas.ru o_O
Главная
Поиск по ключевым словам:
страница 1страница 2страница 3страница 4 ... страница 8страница 9
Похожие работы
Лекция 2 Аффины. 7 Двумерные геометрические (аффинные) преобразования 7 - страница №3/9

Выводы по плоским геометрическим преобразованиям


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

М =

Элементы a,b,c и d определяют коэффициенты поворота, масштабирования и сдвига. Элементы е и f служат для формирования переноса. Смысл трех оставшихся элементов необходимо прояснить. Начнем с k и m. Обычно, мы устанавливали им нулевое значение. Теперь положим их отличными от нуля, элементы главной диагонали приравняем к единице, а остальные элементы обнулим. Применим получившееся преобразование к произвольной точке заданной в однородных координатах с w =1.

[x’ y’ w’] = [x y 1] = [x y kx+my+1]

x’ = x, y’=y

Для того, чтобы понять результат, обратимся к геометрической интерпретации однородных координат. Точка в однородных координатах определяется тройкой, следовательно, мы имеем дело с трехмерной координатной системой, определенной в пространстве. Две оси системы нам привычны это X и Y, а третья – W, ось масштабных коэффициентов. Зафиксировав значение W, установив его равным единице, мы перешли от пространства к плоскости параллельной плоскости XOY. Установив элементы k и m отличными от нуля, мы сняли данное ограничение и полученная в результате преобразования точка расположена в пространстве. При этом ее третья координата определяется по формуле kx+my+1 т.е. зависит от значений x и у. Следовательно, точки, подвергшиеся данному преобразованию, будут лежать в некоторой плоскости не параллельной плоскости XOY. Вернем точку на плоскость W=1 путем проецирования лучами, проходящими через начало координат. Из подобия треугольников x’’= x’/w’= x/( kx+my+1) и аналогично y’’= y’/w’= y/( kx+my+1). Таким образом, математически подобное проецирование выразится в простой нормализации.

[x’’ y’’ 1] =

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

[x y 1] = [x y s]

Все точки, подвергшиеся такому преобразованию будут лежать в плоскости W=s которая параллельна плоскости W=1. Нормализация будет приводить к простому масштабированию с одинаковыми коэффициентами по осям.

[x’ y’ 1] =

Основное отличие такого масштабирования от рассмотренного ранее состоит в том, что при s1 – сжатие.


Трехмерные преобразования


При переходе в пространство добавляется координата Z и, следовательно, размерность матриц увеличивается на единицу. Точки в пространстве представляются четверками [x y z 1], размерность матриц преобразований становится 4*4.

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

Отображение в пространстве производится относительно плоскостей. Так при отображении относительно плоскости XOY поменяют знаки только координаты Z. Матрица такого преобразования будет выглядеть следующим образом. М = . Аналогично для других плоскостей.

С поворотами ситуация более сложная.


Преобразования поворота в пространстве


Повороты в пространстве производятся вокруг осей. Рассмотрим повороты вокруг главных координатных осей. Положительными считаются повороты против часовой стрелки, если смотреть с конца положительной полуоси. Изученный нами ранее поворот относительно начала координат на плоскости XOY можно рассматривать как поворот в пространстве относительно оси Z. Для получения матриц поворота относительно других координатных осей можно использовать ту же схему рассуждений, что приводилась нами для определения поворота на плоскости XOY.

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

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

Для выполнения заданного преобразования необходимо:

Совместить точку привязки с началом координат за счет преобразования переноса Т, задаваемого вектором, соединяющим начало координат с этой точкой.

Выполнить поворот вокруг оси X на угол , переводящий направляющий вектор в плоскость XOZ .

Выполнить поворот вокруг оси Y на угол , совмещающий направляющий вектор с положительной полуосью Z.

Выполнить поворот вокруг оси Z на требуемый угол .

Выполнить обратные преобразования, приводящие сцену в исходное состояние.

Коммутативность преобразований

Преобразования как изменение координатных систем


На первой лекции мы рассматривали геометрический конвейер и говорили о различных координатных системах и переходах между ними. В данной лекции мы говорим о преобразованиях геометрических объектов. Как же устранить данное противоречие?

Рассмотрим любое преобразование объекта, например перенос точки. Перенесем точку в соответствии с заданным вектором. Точка Р с координатами (2 3) преобразуется в точку Р’ с координатами (4 5).

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

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

Рассмотрим еще один пример. В исходной координатной системе С1 с помощью преобразования масштабирования ( Sx=0.5 Sy=0.5 ) определим координатную систему C2=C1*S21. На ее основе с помощью преобразований переноса (Dx=4 Dy=2) и поворота (=45є) определим координатную систему

C3=C2*T23*R23. С учетом композиции запишем С3=С2*M23 Очевидно, что отношения между координатными системами С3 и С1 описываются формулой C3= C1*S21*T23*R23 =С1*М31.

Таким образом, мы определили три координатные системы и установили отношения между ними. Нарисуем в координатных системах С2 и С3 два одинаковых домика и перейдем в координатную систему С1. Изображения подверглись масштабированию, повороту и смещению согласно установленных нами отношений.

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

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

Лекция 3. Двумерный конвейер.

Координатные системы двух мерного геометрического конвейера и их преобразование


Мы рассмотрели набор базовых геометрических преобразований на плоскости и в пространстве. Теперь перейдем к рассмотрению основного механизма визуализации –геометрического конвейера. Почему собственно конвейер? С этим словом, у нас ассоциируется Генри Форд, впервые применивший конвейер при производстве автомобилей. Геометрический конвейер использует главный принцип любого конвейера – параллельность выполнения всех этапов технологического цикла. Так же как на сборочном конвейере крупного завода одновременно находятся десятки автомобилей на разной стадии готовности, в геометрическом конвейере могут одновременно обрабатываться несколько сцен. Когда одни из них только собираются, другие могут растеризоваться и демонстрироваться пользователю. Более того, составляющие одной сцены могут обрабатываться параллельно на разных ветках конвейера.

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

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

Мировые координаты (World coordinate - WC). Координатная система пользователя. Используется прикладным программистом для описания графического ввода и вывода, ее размеры зависят от реальных размеров моделируемых объектов.

Нормализованные координаты устройства (Normalize device coordinate - NDC). Независимая от устройств декартова система координат, приведенная к диапазону от 0 до 1. Используется для хранения данных, обеспечивает защиту от переполнения и потери точности.

Координаты устройства (Device coordinate – DC). Координатная система, определяемая конкретным устройством вывода графической информации.

Устройство вывода графической информации в большинстве случаев имеет ограниченное рабочее пространство прямоугольной формы. Следовательно, мы не можем произвести вывод всех объектов, произвольно расположенных в координатной системе устройства. Часть объектов может оказаться за пределами рабочего пространства. Для преодоления данной проблемы определим в координатной системе устройства прямоугольную область и введем ограничение – на устройство будут выведены только примитивы, попавшие в заданную область. Это прямоугольник носит название поля вывода (ViewPort). Поле вывода не обязательно должно занимать всю рабочую область устройства. Например, мы можем определить в рабочей зоне устройства несколько непересекающихся полей вывода с тем, чтобы создать в них различные изображения (в принципе, можно и пересекающиеся, но это уже спецэффекты).

Введение данного ограничения делает нецелесообразным преобразование всех объектов сцены из одной координатной системы в другую. Зачем делать лишнюю работу, преобразовывая объекты, которые не попадут в поле вывода? Зададим в исходной координатной системе прямоугольную область, называемую окном (Window). Объекты или части объектов, принадлежащие этой области, необходимо подвергнуть преобразованию. Объекты и части объектов, не принадлежащие этой области, необходимо исключить из рассмотрения. Данная операция носит название отсечения (clipping).

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

В рассматриваемом нами конвейере два преобразования: WC – NDC (из Window1 во ViewPort1) и NDC – DC (из Window2 во ViewPort2). Оба преобразования выполняются по одинаковой схеме. Рассмотрим ее.

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

в этой формуле выражение можно рассматривать как масштабирующий коэффициент.





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

И переходя к матричной форме

Pv=PwST=PwM

[x’ y’ 1] = [x y 1]

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

Обратите внимание на то, что прямоугольники, определяющие окно и поле вывода должны быть подобны, т.е. иметь одинаковые пропорции между высотой и шириной (подобны), в противном случае масштабирующие коэффициенты по осям x и y будут различны. Следовательно, будут нарушаться пропорции всех отображаемых объектов.

С введением рассмотренных ограничений наш конвейер приобрел новые полезные свойства. Для упрощения примера, зафиксируем размер поля вывода и будем производить изменения окна. При переносе окна мы видим различные фрагменты сцены, т.е. происходит «прокрутка» изображения в поле вывода. При изменении размеров окна происходит изменение масштаба выводимого изображения, естественно с изменением видимой области фрагмента. Подобным образом в графических системах реализуется функция изменения масштаба (Zoom). Сложность возникает в интерактивных системах, где пользователь задает область сцены, которую хочет видеть увеличенной. Так как поле вывода зафиксировано, видимая область определяется только окном. Следовательно, пользователь задает образ нового окна, но делает это в координатах устройства. Для того, чтобы определить новое преобразование надо преобразовать образ окна из координат устройства в исходные координаты (в нашем случае в нормализованные). Сделать это можно с помощью преобразования, обратного рассмотренному преобразованию.


1>   следующая страница >>