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

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

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

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

В.З. Интерактивный ландшафт

207

Обязательная часть задания

Для выполнения обязательной части задания необходимы:

  • генерация трехмерного ландшафта

  • раскраска для придания реалистичности

  • эффект тумана

  • возможность «полета» над ландшафтом (управление)

Более подробное описание:

Генерация ландшафта

Один из вариантов задания поверхности ландшафта — зада­ние так называемого «поля высот» — функции вида z = f(x,y), которая сопоставляет каждой точке (х, у) плоскости OXY число z — высоту поверхности ландшафта в этой точке. Один из спосо­бов задания функции / — табличный, когда функция / представ­ляется матрицей Т размера М х N, и для целых х и у / = Т[х, у], а для дробных х и у из диапазонов [0..М — 1] и [0.../V — 1] соответ­ственно, / вычисляется интерполяцией значений / в ближайших точках плоскости OXY с целыми ж и у, а вне указанных диапа­зонов х и у значение функции считается неопределенным.

Допустим, в памяти лежит двухмерный массив со значения­ми матрицы Т. Пусть N = М. Если теперь для каждого квадрата [х, х + 1] х [у, у + 1], где х ш у принадлежат диапазону [0..N2] построить две грани: ((х,у,Т[х,у]),(х + 1,у,Т[х + 1,у]),(х + 1,у + 1,Т[х + 1,у + 1]))и((х,у,Т[х,у]),(х + 1,у + 1,Т[х + 1,у + 1]),(х,у + 1,Т[х,у + 1])), то мы получим трехмерную модель поверхности, описываемой матрицей Т.

Но каким образом задать массив значений матрицы Т? Один из способов — сгенерировать псевдослучайную поверхность с по-

208 Приложение В. Примеры практических заданий

мощью фрактального разбиения. Для этого положим размер­ность матрицы Т равной 2 + 1, где N — натуральное число. Зададим некоторые произвольные (псевдослучайные) значения для четырех угловых элементов матрицы . Теперь для каждого из четырех ребер матрицы (это столбцы или строки элемен­тов, соединяющие угловые элементы) вычислим значение эле­мента матрицы Т, соответствующего середине ребра. Для этого возьмем среднее арифметическое значений элементов матрицы в вершинах ребра и прибавим к получившемуся значению некото­рое псевдослучайное число, пропорциональное длине ребра. Зна­чение центрального элемента матрицы вычислим аналогично, только будем брать среднее арифметическое четырех значений элементов матрицы в серединах ее ребер.

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

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

Внимание: использование NURBS возможно, но не привет­ствуется в силу ограниченности использования NURBS для ре­альных приложений.

В.З. Интерактивный ландшафт

209

Раскраска ландшафта

Чтобы сделать получившуюся модель немного более напоми­нающей ландшафт, ее можно раскрасить. Каждой вершине мож­но сопоставить свой цвет, зависящий от высоты этой вершины. Например, вершины выше определенного уровня можно покра­сить в белый цвет в попытке сымитировать шапки гор, вершины пониже — в коричневый цвет скал, а вершины уровнем еще ни­же— в зеленый цвет травы. Значения «уровней» раскраски по­верхности следует подобрать из эстетических соображений.

Освещение ландшафта

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

Цвет вершин можно задавать через glColor совместно с

glColorMaterial (GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

Туман

Чтобы усилить (или хотя бы создать) иллюзию больших раз­меров модели и се протяженности, можно воспользоваться эф­фектом тумана. Тип тумана (линейный или экспоненциальный) следует выбрать из индивидуальных эстетических предпочте­ний. Способ создания тумана описан в разделе 5.4.

Управление

Элементарное управление движением камеры по клавиатур­ным «стрелочкам». Нажатие на стрелку «вверх»—передвиже­ние по направлению взгляда вперед. «Назад» — по направлению взгляда назад. «Влево», «Вправо» по аналогии, «Page Up», «Page Down» —вверх, вниз, соответственно.

210 Приложение В. Примеры практических заданий

В GLUT'e получать нажатия не алфавит­
но-цифровых клавиш можно через функцию
glutSpecialFunc(void (*)(int key, int x, int у)), где key — кон­
станта, обозначающая клавишу (см. в glut.h — GLUT_KEY).
Функция используется аналогично glutKeyboardFuncQ.

Дополнительная часть

Управление мышью

Движение мыши в горизонтальной плоскости (смещение по оси X) управляет углом поворота направления взгляда в гори­зонтальной плоскости (угол альфа G [0..2-Л"]). Движение мыши в вертикальной плоскости (смещение по оси Y) управляет углом поворота направления взгляда в вертикальной плоскости отно­сительно горизонта (угол бета G [—7г..7г]). Зная оба угла, вектор направления взгляда в мировых координатах вычисляется сле­дующим образом:

direction_z = sin(6eTa);

direction_x = соз(альфа) * cos(6eTa);

direction_y = sin (альфа) * cos (бета);

а затем нормализуется.

Вектор направления «вбок» вычисляется как векторное про­изведение вектора направления вертикально вверх, то есть век­тора (0, 0,1) и уже известного вектора направления взгляда.

Вектор направления «вверх» вычисляется как векторное про­изведение вектора направления взгляда и вектора направления «вбок».

Положение камеры в OpenGL можно передать с помощью ко­манды gluLookAtQ. Подсказка: параметр target можно положить равным position + direction.

Смещение позиции камеры должно происходить не на фик­сированное расстояние за один кадр, а вычисляться, исходя из

В.З. Интерактивный ландшафт

211

скорости передвижения камеры, и времени, ушедшего на обсчет последнего кадра. Передвижение камеры должно осуществлять­ся в направлении взгляда. Скажем, по левой кнопке мыши — вперед, а по правой — назад. Для того, чтобы засечь время, можно воспользоваться функцией timeGetTimeQ, описанной в «mmsystem.h», и реализованной в библиотеке «winmm.lib» (толь­ко для Windows).

^include "mmsystem.h"

void Display () {

int system_time_before_rendering ; system_time_before_rendering = timeGetTime (); RenderFrame (); int time_spent_rendering_msec =

timeGetTime () —system_time_before_rendering ;

}"

В GLUT'e для этого есть специальный вызов (аналогично timeGetTimeQ):

time = glutGet (GLUT_ELAPSED_TME);

Вода, или нечто на нее похожее

При раскраске ландшафта можно добавить еще один, самый нижний «уровень» —уровень воды. Вершины, располагающиеся на этом уровне, можно покрасить в цвет воды — предположи­тельно, синий. Для того, чтобы получившиеся «водоемы» не вы­глядели продолжением поверхности ландшафта, просто покра­шенным в синий цвет, а имели плоскую поверхность, при генера­ции поля высот можно установить порог высоты, ниже которого «опускаться» вершинам запрещается. Если для элемента матри-

212 Приложение В. Примеры практических заданий

цы генерируется значение высоты ниже этого порога, элемент инициализируется пороговым значением.

Объекты

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

Отражения в воде

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

Тени

На этапе раскраски вершин ландшафта (то есть это надо сде­лать один раз, а не каждый кадр) из каждой вершины можно вы­пустить луч, противоположный направлению солнца. Если луч не пересекся с поверхностью ландшафта — раскрашивать как

В.З. Интерактивный ландшафт

213

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

Оценка



Ландшафт

8 баллов

Раскраска

+2 балла

Управление

+2 балла

Управление мышью

+2 балла

Объекты

+3 балла

Вода

+4 балла

Отражение

+4 балла

Тени

+5 баллов

В таблице указано максимальное число баллов по каждому пункту. Система выставления баллов — гибкая, зависит от прав­доподобности и впечатления от работы.

Дополнительные источники информации

http://www.vterrain.org

Литература

[9

Каннингем, С. АСМ SIGGRAPH и обучение машинной гра­фике в Соединенных Штатах. Программирование, 4, 1991.

Bayakovsky, Yu. Russia: Computer Graphics Education Takes off in 1990s. Computer Graphics, 30(3), Aug. 1996.

Canningham S. An Evoluing Approach to CG Courses in CS. Graphicon'98 Conference Proceedings, MSU, Sept. 1998.

Bayakovsky, Yu. Virtual Laboratory for Computer Graphics and Machine Vision. Graphicon'99, Conference proceedings, MSU, Sept 1999.

Эйнджсл Э. Интерактивная компьютерная графика. Ввод­ный курс на базе OpenGL, 2 изд. Пер. с англ.- Москва, «Ви­льяме», 2001.

Порев В.Н. Компьютерная графика. СПб., BHV, 2002.

Шикин А. В., Боресков А. В. Компьютерная графика. По­лигональные модели. Москва, ДИАЛОГ-МИФИ, 2001.

Тихомиров Ю. Программирование трехмерной графики. СПб, BHV, 1998.

Performance OpenGL: Platform Independent Techniques. SIGGRAPH 2001 course.

215

216

Литература

[10] OpenGL performance optimization, Siggraph'97 course.

[11] Visual Introduction in OpenGL, SIGGRAPH'98.

[12] The OpenGL graphics system: a specification (version 1.1).

[13] Программирование GLUT: окна и анимация. Miguel Angel Sepulveda, LinuxFocus.

[14] The OpenGL Utility Toolkit (GLUT) Programming Interface, API version 3, specification.

[15] А. Игнатенко. Однородные координаты. Научно-образовательный интернет-журнал «Графика и Муль­тимедиа». http://cgm.graphicon.ru/content/view/51/61/.

Предметный указатель

API, 11

GLU, Graphics Utility Library,

26 GLUT, GL Utility Toolkit, 27

IRIS GL, 12

OpenGL, 11

синтаксис команд, 30 оптимизация, 115 особенности, 12 ошибки, 127 приемы работы, 101

Tao Framework, 157

Анимация, 20

Буфер

глубины, 62, 90 маски, 94 накопитель, 93 очистка, 40

Граничные модели, 19

Графический процесс, 18

Команды GL glAccum, 94 glArrayElement, 50 glBegin, 44 glBindTexture, 80 glBlendFunc, 91 glCallList, 48 glCallLists, 48 glClear, 40 glClearColor, 40 glColor, 42 glColorMaterial, 68 glColorPointer, 50 glCullFace, 46 glDeleteLists, 48 glDepthRange, 64 glDisable, 43 glDisableClientState, 50 glDr aw Arrays, 50 glDrawBuffer, 93 glDrawElements, 51 glEnable, 43

217

218

Предметный указатель

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

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

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

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