Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ПРЕОБРАЗОВАНИЯ В ПРОСТРАСТВЕ




Для начала рассмотрим какие бывают преобразования на плоскости. Из тех, что сохраняют параллельные линии параллельными (аффинные преобразования) можно выделить четыре:

1. Параллельный перенос

 

 

2. Масштабирование

 

3. Сдвиг

По оси OX:

По оси OY:

 

 

4. Поворот

 

 

Общее преобразование можно представить в виде системы уравнений или в матричном виде:

 

Перейдем к однородным координатам. Если представить координаты на плоскости трехкомпонентной вектор-строкой[1], то в уравнении можно использовать единую матрицу трансформирования:

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

Также можно применить обратные преобразования умножая на обратную матрицу трансформирования.

В случае с трехмерным пространством ничего не меняется. Мы также будем использовать однородные координаты и общее уравнение примет вид:

Коэффициенты – используются для масштабирования.

Коэффициенты – используются для параллельного переноса.

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

Преобразование нормальных векторов

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

 

Рис. 8.1 Трансформирование нормалей при аффинном преобразовании

Задание на лабораторную работу:

1. Добавляем в наш проект новый файл matrix.js. В него необходимо добавить функцию-конструктор матрицы

2. Реализовываем все необходимые функции для работы с матрицами: транспонирование, умножение, возврат обратной матрицы

3. В функции-конструкторе модели (файл model.js) задаем матрицу ViewPort, где указываем коэффициенты масштабирования и параллельного переноса. Мы наконец-то можем избавиться от той корректировки координат, что вводили в самом начале работы с моделью.

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

5. После считывания координат вершины корректируем ее с помощью новых матриц

6. Также корректируем вектора нормалей в соответствии с новыми матрицами

7. Проверяем результат на модели (рис. 8.2).

 

рис. 8.2 Перспективное преобразование на модели

УПРАВЛЕНИЕ КАМЕРОЙ

До сих пор наша модель не рассматривалась как составляющая сцены. Мы отображали ее в той системе координат, в которой она хранилась. Но часто требуется изменить положение камеры, чтобы взглянуть на сцену под другим ракурсом. Например, мы хотим, чтобы камера находилась в точке E, смотрела в точку C и вектор F был вертикальным (рис. 9.1).

рис. 9.1 Установка новой точки наблюдения

Можно смотреть на эту задачу и с другой стороны: нам нужно подвинуть всю сцену, оставив камеру неподвижной. Т.е. необходимо найти преобразование, которое перенесет объекты из мировой системы координат XYZв систему координат наблюдателя UVN (рис. 9.2).

рис. 9.2 Настройка камеры

Преобразование Mбудет вида «Параллельный перенос + Поворот»

Матрицу Bможно использовать в следующем виде:

Задание на лабораторную работу:

1. В функции-конструкторе модели (файл model.js) задаем три новых вектора eye (точка с которой будем смотреть), center (точка куда будем смотреть) и up (вектор, направленный вертикально)

2. Задаем матрицу Viewс преобразованием системы координат

3. Учитываем новую матрицу преобразования для вершин модели и векторов нормалей

4. Проверяем результат на модели (рис. 9.3)

рис. 9.3Управление камерой

БИБЛОГРАФИЧЕСКИЙ СПИСОК

1. Никулин, А.В. Компьютерная геометрия и алгоритмы машинной графики [Текст] / А.В. Никулин. – СПб.:BHV, 2003. – 560 с.

2. Ламот, А. Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации [Текст] / А. Ламот – М.: Вильямс, 2004. – 1424 с.

3. Рост, Р. OpenGL. Трехмерная графика и язык программирования шейдеров. Для профессионалов [Текст] / Р. Рост. – СПб.: Питер, 2005. – 432 с.

 

ПРИЛОЖЕНИЕ










Последнее изменение этой страницы: 2018-06-01; просмотров: 232.

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