Главная » Просмотр файлов » М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006)

М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 8

Файл №1124363 М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006)) 8 страницаМ. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363) страница 82019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Начнется обработка событий, и сработает привязка функции обратной связи. После того как цикл обработки начнет работать, он никогда не прекратится! Листинг 1.2 показывает, как с помощью С1Л)Т создать простую программу, показанную в листинге 1.1. Заметьте, что код был переформировап. Для улучшения производительности те операции, которые вызываСотся один раз (устацовка цвета фона и системы координат), размещены в процедуре ! и ! с () . Операции рисования (и возможной перерисовки) сцены находятся в процедуре б! эр1ау (), которая зарегистрирована как функция обратной связи СЕНТ. Библиотеки, связанные с ОрепОС 37 Листинг 1.2. Простая программа, использующая БШТ: Пе(!О.с чотп Отзр1ау(чотб) ( /* очищаем все пикселы */ 9161еаг(6С СО(оа ВОРРЕя В)т); /' рисуем белый многоугольник (прямоугольник) с углами в (0,25, 0,25, 0,9) и (0.75, 0.75, 9.0) "/ 91Со1огзг(1.0, 1.0, 1.9): 919ейтп(6с Росчвон), 91Чегтехзг(9.25, 0.25, 9.9); 91НегСЕхзг(9.75, 0.25, 0.0); 91ЧЕГСЕХЗГ(9.75, О.75, О.О); 91ЧегтехЗГ(0.25, 9.75, 9.0); Втвпа О; не ждем(начинаем обработку буферизованных команд Орепб( "/ 91Р1цзл(); чо!б !и!С(чо!О) ( /* выбираем цвет очистки (фона) « / 91С1еагСо1ог(9.0, 0.0.

0.0, О.О); определяем значения обзора */ В)иаСгтхиобе(66 РВО)ЕСт)ОМ); 91(оаб1бепС(Су(): 91ОгСПо(О.О, 1.9, О,О, 1.О, -1.О, 1.О); ) /» Определяем размеры, полажение и режим отображения (одиночный буфер и 96ВА). Открываем окно с надпи в заголовке. Вызываем функции инициализации. Регистрируем функцию обратной связи. Входим в цикл и обрабатываем события. »/ тпС ватп(тпС агйс.

слаг'* агйч) ( 91цС1птС(аагйс, агйч); ВсцС1п! Со! зр1аунобе(6! От 5!М6! Е ! 6(цт а6В); 91ц(1пттнтпбон5!хе(250, 250); 91цС1п!СитпбонРозтттап(199, 100); 51чССгеа(ен!плон(«ие11о"); »и!с(); В)ц(отзрсаугцпс(о!яр!ау); 91отна!п(оор(); геСцгп 0; /' Стандарт 150 С требует от функции юатп возврата значения типа !пС. "/ ) окна сью "Пе11о" Обработка событий Вы можете использовать следующие функции для задания реакции на опреде- ленные события: ° 91цтйезиарейцпс (чо(с! ('/ипс)(шС м, 1п( /с)) — реакция на изменение размера окна; 38 Глава 1 ° Введение в ОрепОЬ ° д!оскеуьоагогипс (чоЫ (")ипс)(ппэ1япес( сйаг ггеу, 1пг х, 1пг у)) и д1исноозегопс (чоЫ ("/илс)(1пг биггоп, Ыг эгаге, 1пгх, 1пг у)) — позволяют обрабатывать нажатия клавиш на клавиатуре и движение мыши и нажатие ее кнопок; ° д1и тиос т опгопс (чо1с) ("/ипс)(1пг х, 1пг у)) — отклик на перемещение мыши при нажатой кнопке.

Рисование трехмерных объектов С(.13Т вклгочает в себя ряд функций для построения трехмерных обьектов: 1соэадедгоп (нкосаэдр) осьтпег1гоп (октаэдр) эрЬеге (сфера) Геарог (чайннк) геггэдег1гоп (тетраэдр) Гогоэ(тор) сопе (конус) соЬе (куб) оодесадеогоп (додекаэдр) Вы можете рисовать зти объекты в виде каркасов или залитыми, оттененными, с заданием векторов нормалей. Например, функциями для рисования куба и сфе- ры являются: чо(с( д1отй1геСиве(СЫопЫе э(ге); чо1с( д1ис5о11с1Сове(С1.с(оные яге); чо(г( д1осэ1т ге5рпеге(С(э)опЫе гаог1иж СЫпг засек, СЫпс эгасггэ); чо1с( В1пс5о1то5рпеге(Сапные гааг1иэ, Сыпь эйсеэ, СЫпс эгасйэ). Все перечисленные модели рисуются отцентрированными относительно начала координат (см.

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

Управление фоновым процессом Вы можете определить функцию, которая будет вызываться, когда никакие собы- тия не возникают — например, при зацикливании, с помощью команды д1нг- 1о1египс(чоЫ ("/ипс)(чо1с))), Аргументом функции является указатель на функ- цию обработки. Для отключения обработки необходимо задать в качестве параметра значение М0сс (нуль).

Анимация 39 В кинотеатре движение создается путем последовательного проецирования кадров на экран — 24 раза/с. Каждый кадр помещается под линзу, затвор открывается, и кадр показывается. Затвор моментально закрывается и остается закрытым, пока фильм движется к следующему кадру, и т. д. Несмотря на то что вы видите 24 различных кадра каждую секунду, ваш мозг объединяет их в плавную анимацию, (Старые фильмы с1арли Чаплина снимались с частотой 16 кадров/с, и в них заметна смена кадров.) Экран в компьютерных графических системах обычно обновляется (перерисовывает изображение) примерно от 60 до 76 раз/с, а в некоторых даже около 120 раз/с.

Несомненно, что 60 раз/с плавнее, чем 30, и, конечно, 120 лучше, чем 60. Однако частота обновления больше 120 раз/с, в зависимости от восприятия, может вызвать ухудшение качества. Ключевым моментом в проецировании движения является то, что каждый кадр показывается полностью. Допустим, вы пытаетесь создать компьютерную анимацию фильма нз миллиона кадров с помощью следующей программы: ореп и(пбои(); (ог (! = 0; ! < 1008009; 1++) ( с!еаг Сье и(пбои(); бгаи (гаее(!); иа(! оп(!! а 24(П о! а аесопб !а очес О; ) Если вы добавите время, затрачиваемое вашей системой на очистку экрана и рисование типичного кадра, эта программа даст тем более плохие результаты, шм ближе время, затраченное на очистку и прорисовку, к 1/24 с. Предположим, что прорисовка занимает около 1/24 с.

Элементы, рисуемые первыми, видны в течение всей 1/24 с н представляют собой сплошное изображение на экране; алементы же, рисуемые в конце, мгновенно стираются перед выводом следующего кадра. В лучшем случае получится призрачное изображение, так как большую часть 1/24 с глаз будет видеть фон, а не элементы, которые должны были строи~ься в конце. Проблема в том, что эта програмыа показывает не законченный кадр, а его построение. Большинство реализаций ОрепОЕ обеспечивают возможности технологии двойной буферизации — аппаратной или программной, которая предоставляет два полноценных цветовых буфера. Один отображается, в то время как второй подготавливается. Когда рисование кадра завершено, буферы меняются местами, то есть тот, который был виден, используется для рисования и наоборот.

Это похоже на кинопроектор с двумя зацикленными кадрами: пока один проецируется на экран, художник стирает и перерисовывает невидимый кадр. Пока художник достаточно быстр, зритель не различит этот способ и способ, когда все кадры уже нарисованы, и проектор просто отображает кадры друг за другом. С двойной буферизацией каждый кадр показывается, только когда рисование завершено, и зритель никогда не видит нарисованный частично кадр. Измененная версия программы, которая отображает «сглаженную» анимацию с помощью двойной буферизации, может выглядеть так: преп и! пбои ! и бооЫе Ьо((ег вобе (); (ог (! = а; ! < )ВВОООеоч !++) ( 40 Глава 1 е Введение в ОрепЯ. с)еаг (ье игпроио; с)гаи (саве(1); анар (Ье Ьа(теса О,' Обновление с задержкой В некоторых реализациях ОрепО1, кроме простой смены видимого и рисуемого буферов, команда виар впе ЬиЕЕегз() задерживает обновление экрана до окончания показа предыдущего буфера.

Эта функция также позволяет показывать буфер с самого начала целиком. Полагая, что частота обновления 60 раз/с, мы получаем, что максимальная частота смены кадров составляет 60 кадров/с (/рз), и, если все ваши кадры смогут быть очищены и нарисованы менее чем за 1/60 с, ваша анимация будет смотреться гладко. Чаше всего кадр оказывается слишком сложным, чтобы быть нарисованным за 1/60 с, и поэтому каждый кадр отображается больше одного раза. Если, например, на рисование кадра затрачивается 1/45 с, вы получите 30 Ерз, и графика задерживается на 1/30 — 1/45 = 1/90 с на каждый кадр, или на одну треть времени. Кроме того, частота смены кадров — это константа, которая может принимать различные значения во время выполнения. Например, прн частоте обновления монитора 1/60 с значения частоты смены кадров могут быть 60 Ерз, 30 Ерз, 20 Ерз, 15 Ерз, 12 Ерз и т. д.

(60/1, 60/2, 60/3, 60/4, 60/5, ...). Это значит, что, когда вы пишете программу и добавляете новые возможности (например, это авиасимулятор, и вы добавляете пейзаж местности), сначала каждая новая возможность, которую вы привносите, не влияет на производительность — вы все еще получаете 60 Ерз. Затем, внезапно частота падает до 30 Ерз, так как система уже не успевает рисовать все за 1/60 с, а это первое возможное очередное значение обмена буферов. Точно так же, если время рисования кадра становится больше 1/30 с, скорость анимации падает с 30 до 20 Ерз. Если сложность сцены близка к одному из периодов Е1/60 с, 2/60 с, 3/60 с и т. д.), то из-за случайных изменений некоторые кадры следуют неско.лько быстрее, а некоторгяе немного медленнее. То есть частота смены кадров непостоянная, и зто может стать заметным визуально. Поэтому, если вы не можете упростить сцену с целью ускоренной подачи кадров, бывает лучше добавить небольшую задержку, чтобы замедлить и выровнять частоту смены кадров.

Если разброс большой, могут потребоваться более сложные методы. Движение = Перерисовка + Обмен Структура реальной программы, создаюацей анимацию, не слишком отличается от этого описания. Обычно легче перерисовать целиком буфер из рабочей области для каждого кадра, чем определить, какую часть нужно перерисовать. Это особенно верно для приложений наподобие трехмерных авнасимуляторов, когда небольшое изменение положения самолета изменяет расположение всего, находящегося за окном.

Анимация 41 В большинстве анимаций объекты в сцене просто перерисованы с различными изменениями — перемещена точка обзора наблюдателя, или машина немного сдвинута на дороге, или об ьект слегка повернут. Если существенные перерасчеты требуются не для операций перерисовки, частота смены кадров падает.

Однако нужно иметь в виду, что время после вызова функции анар 1Пе Ьиттег() часто используется для подобного рода вычислений. В ОрепС) не включена команда анар 1Пе Ьиттег О, так как зта возможность может отсутствовать на аппаратном уровне, и во многих случаях она очень зависима от оконной системы. Например, при наличии прямого доступа к системе Х %'1пг)очч, вы можете использовать следующую команду СЕХ: чо~б е1Х5нарви(1ега(01зр1ау *ору, И(пбонз н1пбон). (Подобные команды для других оконных систем описаны в приложении В). Если используется библиотека СЕНТ, команда вышгядит следующим образом: чо!б Х1и15анрви1(егз(чо)б), Листинг 1.3 демонстрирует использование 01игбнарбиттегаО при рисовании вращающегося квадрата, как показано на рнс.

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

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

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