Главная » Просмотр файлов » Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)

Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366), страница 6

Файл №1124366 Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)) 6 страницаЮ.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366) страница 62019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 6)

void glMatrixMode (GLenum mode)

вызов которой со значением параметра mode, равным GL_MODELVIEW, GL_PROJECTION или GL_TEXTURE, вклю­чает режим работы с модельно-видовой матрицей, матрицей проекций, или матрицей текстуры соответственно. Для вызова команд, задающих матрицы того или иного типа, необходимо

4-1- Работа с матрицами

57

сначала установить соответствующий режим.

Для определения элементов матрицы текущего типа вызыва­ется команда

void glLoadMatrix [ f d] (GLtype *m)

где m указывает на массив из 16 элементов типа float или double в соответствии с названием команды, при этом сначала в нем должен быть записан первый столбец матрицы, затем второй, третий и четвертый. Еще раз обратим внимание: в массиве m матрица записана по столбцам. Команда

void glLoadldentity (void)

заменяет текущую матрицу на единичную.

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

void glPushMatrix (void) void glPopMatrix (void)

Они записывают и восстанавливают текущую матрицу из сте­ка, причем для каждого типа матриц стек свой. Для модельно-видовых матриц его глубина равна как минимум 32, для осталь­ных— как минимум 2.

Для умножения текущей матрицы на другую матрицу ис­пользуется команда

void glMultMatrix[f d] (GLtype *m)

где параметр m должен задавать матрицу размером 4x4. Если обозначить текущую матрицу за М, передаваемую матрицу за Т, то в результате выполнения команды glMultMatrix текущей ста­новится матрица М*Т. Однако обычно для изменения матрицы того или иного типа удобно использовать специальные коман­ды, которые по значениям своих параметров создают нужную матрицу и умножают ее на текущую.

58

Глава 4- Преобразования объектов

В целом, для отображения трехмерных объектов сцены в ок­но приложения используется последовательность, показанная на рисунке 4.2.


Мировые координаты

Видовые координаты

Нормализованные координаты


Параметры области вывода (gIViewport)


Оконные координаты



Рис. 4.2. Преобразования координат в OpenGL

Запомните: все преобразования объектов и камеры в OpenGL производятся с помощью умножения векторов координат на мат­рицы. Причем умножение происходит на текущую матрицу в мо­мент определения координаты командой glVertex и некоторыми другими.

4.2. Модельно-видовые преобразования

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

4-2. Модельно-видовые преобразования

59

мененные координаты этой вершины:



(х'\

(х\

У'

= М

У

Z'

Z

VI/ VI/

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

void glTranslate [ f d] (GLtype x, GLtype y, GLtype z) void glRotate[f d] (GLtype angle,

GLtype x, GLtype y, GLtype z) void glScale[f d] (GLtype x, GLtype y, GLtype z)

glTranslate производит перенос объекта, прибавляя к коорди­натам его вершин значения своих параметров.

glRotate производит поворот объекта против часовой стрелки на угол angle (измеряется в градусах) вокруг вектора(х,у,г).

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

Все эти преобразования изменяют текущую матрицу, а пото­му применяются к примитивам, которые определяются позже. В случае, если надо, например, повернуть один объект сцены, а другой оставить неподвижным, удобно сначала сохранить те­кущую видовую матрицу в стеке командой glPushMatrix, затем вызвать glRotate с нужными параметрами, описать примитивы, из которых состоит этот объект, а затем восстановить текущую матрицу командой glPopMatrix.

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

Это можно сделать с помощью команды

60

Глава 4- Преобразования объектов

void gluLookAt (

GLdouble eyex , GLdouble eyey , GLdouble eyez , GLdouble centx , GLdouble centy , GLdouble centz , GLdouble upx, GLdouble upy, GLdouble upz)

где точка (eyex, eyey, eyez) определяет точку наблюдения, (centx, centy, centz) задает центр сцены, который будет проеци­роваться в центр области вывода, а вектор (upx, upy, upz) задает положительное направление оси у, определяя поворот камеры. Если, например, камеру не надо поворачивать, то задается зна­чение (0,1,0), а со значением (0, —1,0) сцена будет перевернута.

Строго говоря, эта команда совершает перенос и поворот объ­ектов сцены, но в таком виде задавать параметры бывает удоб­нее. Следует отметить, что вызывать команду gluLookAtQ имеет смысл перед определением преобразований объектов, когда мо-дельно-видовая матрица равна единичной.

Запомните: матричные преобразования в OpenGL нужно за­писывать в обратном порядке. Например, если вы хотите снача­ла повернуть объект, а затем передвинуть его, сначала вызови­те команду glTranslate (), а только потом —glRotate(). После этого определяйте сам объект.

4.3. Проекции

В OpenGL существуют стандартные команды для задания ортографической (параллельной) и перспективной проекций. Первый тип проекции может быть задан командами

void glOrtho (GLdouble left , GLdouble right , GLdouble bottom , GLdouble top , GLdouble near , GLdouble far)

void gluOrtho2D (GLdouble left , GLdouble right , GLdouble bottom, GLdouble top)

4-3. Проекции

61

Первая команда создает матрицу проекции в усеченный объ­ем видимости (параллелепипед видимости) в левосторонней си­стеме координат.

Параметры команды задают точки (left, bottom, znear) и (right, top, z far), которые отвечают левому нижнему и право­му верхнему углам окна вывода. Параметры near и far задают расстояние до ближней и дальней плоскостей отсечения по уда­лению от точки (0, 0, 0) и могут быть отрицательными.

z = zfar

/

z = z

lear

/

(left, bottom, znear

у

(right, top, zfar)

Рис. 4.З. Ортографическая проекция

Во второй команде, в отличие от первой, значения near и far устанавливаются равными —1 и 1 соответственно. Это удобно, если OpenGL используется для рисования двумерных объектов. В этом случае положение вершин можно задавать, используя команды glVertex2.

Перспективная проекция определяется командой

void gluPerspective (GLdouble angley , GLdouble aspect ,

GLdouble znear, GLdouble zfar)

которая задает усеченный конус видимости в левосторонней си­стеме координат. Параметр angley определяет угол видимости в градусах по оси у и должен находиться в диапазоне от 0 до 180.

62

Глава 4- Преобразования объектов

Угол видимости вдоль оси х задается параметром aspect, кото­рый обычно задается как отношение сторон области вывода (как правило, размеров окна).

Рис. 4.4. Перспективная проекция

Параметры zfar и znear задают расстояние от наблюдателя до плоскостей отсечения по глубине и должны быть положительны­ми. Чем больше отношение zfar/znear, тем хуже в буфере глу­бины будут различаться расположенные рядом поверхности, так как по умолчанию в него будет записываться «сжатая» глубина в диапазоне от 0 до 1.

Прежде чем задавать матрицы проекций, не забудь­те включить режим работы с нужной матрицей командой glMatrixMode(GL_PROJECTION) и сбросить текущую с помощью вызова glLoadldentityQ.

Пример:

/* ортографическая проекция */ glMatrixMode (GL_PROJECTION); glLoadldentity () ; glOrtho(0, w, 0, h, -1.0, 1.0);

4-4- Область вывода

63

4.4. Область вывода

После применения матрицы проекций на вход следующего преобразования подаются так называемые усеченные (clipped) координаты. Затем находятся нормализованные координаты вер­шин по формуле:

'xn\ /Xc/Wc

Уп 1 = 1 Ус/Wc

,Zn) \Zc/wc

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

void glViewPort (GLint x, GLint у,

GLint width, GLint height)

Значения всех параметров задаются в пикселах и определяют ширину и высоту области вывода с координатами левого нижне­го угла (х,у) в оконной системе координат. Размеры оконной си­стемы координат определяются текущими размерами окна при­ложения, точка (0,0) находится в левом нижнем углу окна.

Используя параметры команды glViewPortQ, OpenGL вычис­ляет оконные координаты центра области вывода (ох,оу) по фор­мулам:

ох = х + width/2 оу = у + height/2

Пусть рх = width, py = height, тогда можно найти оконные координаты каждой вершины:


{рх/2)хп + ох

(Ру/2)Уп + Оу

J(/-n)/2]zra + (n + /)/2,

При этом целые положительные величины пи/ задают ми­нимальную и максимальную глубину точки в окне и по умол­чанию равны 0 и 1 соответственно. Глубина каждой точки за­писывается в специальный буфер глубины (z-буфер), который

64 Глава 4- Преобразования объектов

используется для удаления невидимых линий и поверхностей. Установить значения пи/ можно вызовом функции

void glDepthRange (GLclampd n, GLclampd f)

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

4.5. Контрольные вопросы

  1. Какие системы координат используются в OpenGL?

  2. Перечислите виды матричных преобразований в OpenGL. Каким образом в OpenGL происходят преобразования объ­ектов?

  3. Что такое матричный стек?

  4. Перечислите способы изменения положения наблюдателя в OpenGL.

  5. Какая последовательность вызовов команд glTranslate (), glRotateQ и glScale() соответствует команде gluLookAt(0, 0, -10, 10, 0, 0, 0, -1, 0)?

  6. Какие стандартные команды для задания проекций вы зна­ете?

  7. Что такое видовые координаты? Нормализованные коорди­наты?

Глава 5.

Материалы и освещение

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

5.1. Модель освещения

В OpenGL используется модель освещения, в соответствии с которой цвет точки определяется несколькими факторами: свой­ствами материала и текстуры, величиной нормали в этой точке, а также положением источника света и наблюдателя. Для кор­ректного расчета освещенности в точке надо использовать еди­ничные нормали, однако команды типа glScale могут изменять длину нормалей. Чтобы это учитывать, используйте уже упо­минавшийся режим нормализации векторов нормалей, который

65

Характеристики

Тип файла
Документ
Размер
3,41 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6439
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее