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

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

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

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

такое представление называется мозаичггьив ((еззе)- !а(!оп), и библиотека С).() предоставляет соответствующий набор подпрограмм Югя процесса нгесселяции — получения мозаичного представления'. Эти подпрограммы принимают на вход контуры произвольной формы, которые описывают ' Тесселяния (Сеззе)ацоп) — считается, что слово происходит от названия кубиков из смальты— имега, иэ которых художники собирают мозаику. Термигг еще не совсем орижился в отечественной нхггической литературе. — Примеч. иерее. 418 Глава 11 ° Мозаичное представление и поверхности второго порядка трудновоспроизводимые многоугольники, и возвращают комбинацию из треуголъников, сеток треугольников, «веееров» треугольников и линий.

На рис. 11.1 показаны несколько контуров фигур, требующих разбиения: вогнутый многоугольник, многоугольник с отверстием и самопересекаюшийся многоугольник. , ...з Рис, 11.1. Контуры, требующие мозаичного разбиения Если вы считаете, что многоугольник нуждается в тесселяции, выполните следукпцие действия: 1. Создайте новый объект разбиения с помощью команды к1цйенТезз(). 2. Используйте несколько раз к1цтеззСа11оасх(), чтобы зарегистрировать функции обратной связи, вызываемые во время разбиения. Самый сложный случай обратной связи — это когда алгоритм тесселяции обнаруживает пересечение и должен вызвать функцию, зарегистрированную для параметра 6Ю ТЕ55 СОНВ1НЕ 3. Задайте свойства разбиения командой к1цТеззргорегту().

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

ПРИМЕЧАНИЕ Представленные рекомендации соответствуют версии 6ьп 1.2. Если ваша версия более старая, вам следует обратиться к процедурам, описанным в разделе «Сообщения об ошибках 6Ш». Что. бы узнать версию своей библиотеки 6Ш, используйте команду дщ6етзтппд(6Ш ЧЕЛЗ10Н), ко. торая возвращает требуемое значение в виде строки. А если и д~ц6е(5(ппд() нет в вашей 6(Ц значит — зто 6Ь0 1.0. Создание объекта разбиения Сложный многоугольник, представленный в виде мозаики, связан с такими дая.

ными, как вершины, ребра и функции обратной связи. Чтобы выполнить тесселя. цию, ваша программа сначала должна создать объект разбиения с помощью команды 11цйенгезз(). Мозаичное представление многоугольников 449 ОШ!евое[а!ог" к1ийемтеьа(чоЫ); Создает новый объект разбиения и возвращает указатель на него.

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

С другой стороны, аккуратность никогда не мешает. Процедуры обратной связи После создания объекта разбиения вы должны подготовить несколько процедур обратной связи (са[[Ьас[с), вызываемых по ходу тесселяции. Затем с помощью процедур 011) вы описываете контуры одного или более многоугольников. Теперь средство выполнения разбиения будет обращаться к вашим процедурам обГатной связи по необходимости. Те функции, которые опущены, просто не вызываются при тесселяции, и вы не получите информацию, которую они могли бы передать вашей программе. Для [казакия процедур обратной связи предназначена команда к1итеззба11Ьаск().

чоЫ а1итеьзСа1\Ьасх(О[Л!еззе[агог 'Сеззо(д, СЕепшп Суре, чоЫ (*)п)О); Ассоциирует функцию обратной связи (Тп) с объектом разбиения (ге»за[у). Назначение функции определяется аргументом (ура, который может принимать следую1циезначения: 6СО ТЕ55 ВЕ61й,бЕО ТЕ55 ВЕ61й ОАТА,6СО ТЕ55 Е06Е ГСА6, 660 ТЕ55 Е06Е Г!Аб ОАТА, 610 ТЕ55 ЧЕКТЕХ, 660 ТЕ55 ЧЕРТЕХ ОАТА, 6СО ТЕ55 ЕМО, 6ЕО ТЕ55 ЕМО ОАТА, 610 ТЕ55 СОМВ1МЕ, 660 ТЕ55 СОМВ1МЕ ОАТА, 6СО ТЕ55 ЕККОК или 6СО ТЕ55 ЕККОК ОАТА. Двенадцать возможных функций обратной связи имеют следующие прототипы: б!О ТЕ55 ВЕ61й чоЫ Ье61п(6Сепив Суре) б!О ТЕ55 ВЕ61М ОАТА чо16 Ье61п(В!елим гуре,чоЫ*иаег дага) б!О ТЕ55 Е06Е ГСА6 чо(6 ебкеГ1ак(6!Ьоо(еап)(ад) б!О ТЕ55 Е06Е ГСА6 ОАТА чоЫ еддеГ1аб(б!Ьоо(еапЯад,чо16*изег дага) б!и ТЕ55 ЧЕКТЕХ чоЫ чеггех(чо(6*чегсе» дага) 6СО ТЕ55 ЧЕКТЕХ ОАТА чо)6чегтех(чоЫ'чейе» дага,чо16*игег дага) 660 ТЕ55 ЕМО чоЫ еп6(чоЫ) бЕО ТЕ55 ЕМО ОАТА чоЫ еп6(чо16 *итог дата) бСЧ ТЕ55 СОМВ1МЕ чоЫ совЬ1 пе(б(доиЬ(е соопй[3Ь чоЫ *чегго» дасо[4), 6Сйоаг яе(дЬГ[4), чоЫ * "оисдаса) б!О ТЕ55 СОМВ!МЕ ОАТА чоЫсомЬ1пе(6(доиЬ(есоогдт[З),чоЫ*чегса» даса[4[, 6(йоаг ччеГд6~4), чо16 '"аисдаса, чоЫ *итег даТа) чоЫ еггог(6!опию еггпо) чоЫ еггог(6!елим еггпо, чо16*итег дага) 420 Глава 11 ° Мозаичное представление и поверхности второго порядка Для переназначения процедуры обратной связи просто вызывают команду В1цтеззСа(1ьасК О с другим аргументом.

Чтобы бесследно удалить такую процедуру, в команде В1цТеь№Са11ЬасК() задается нулевой указатель. Подпрограммы обратной связи вызываются подобно командам ОрепОЕ В\Веб(пО, В1Еббер1аВ*(), В1Неггех*() и В1Епб(). (См. раздел «Маркирование граничных ребер многоугольников» главы 2 для получения большей информации относительно Р1ЕбйеР1аВ*().) Вызовы 6(0 ТЕ55 СОМВ1МЕ' используются для создания новой вершины в месте пересечения ребер. К футткциям ошибки (6С0 ТЕ55 ЕРРОР*) обращение производится, если во время тесселяции что-то оказалось сделано неправильно.

Для каждого объекта разбиения функция /(ля параметра 610 ТЕ55 ВЕ61М вызывается с одним из четырех возможных значении: 6г ТР1АМ6СЕ РАМ, 61 ТР1АМОСЕ 5ТР1Р, 61 ТР1АМ61Е5 или 6С 11МЕ СОВР. Во время декомпозиции многоугольников алгоритм разбиения выясняет, какой тип примитива треугольника подходит болыпе других. (Если включено свойство 600 ТЕ 55 ВООМОАРУ ОРСУ, используется 6Е С1МЕ СООР). Поскольку флаги границы не имеют смысла в «веере» ((ап) треугольников илн полосе (згпр) треугольников, то при задании процедуры, ассоциированной с параметром 6С0 ТЕ55 Е06Е РСА6, которая включает флаг границ, процедура для 610 ТЕ55 ВЕ61М вызывается только со значением 6С ТР1АМОСЕ5. Вызов 6С0 ТЕ55 Е06Е РЕА6 работает аналогично команде ОрепОЕ к1ЕбВеР1аВ«().

Между вызовами для 6С0 ТЕ55 ВЕ61й и 600 ТЕ55 Ейв производятся обращения к процедурам для параметров 6С0 ТЕ55 Е06Е РСА6 и 6С0 ТЕ55 НЕРТЕХ (обычно с помощью команды В1цтеьзНеггекО, описанной ниже). Ассоциированные с вершинами и ребрами признаки интсрпретируготся так же, как если бы вызовы происходили между В1ВеВ1п() н В1Епб(). Если что-то пошло неправильно, в процедуру обработки ошибки передается номер ошибки библиотеки СШ Строка символов, описывающая ошибку, извлекается командой В1цЕггог5сг(пВО. (См.

раздел «Сообщения об ошибках О1Л)».) Листинг 11.1 содержит часть программы-прилгера гезз. с и демонстрирует создание объекта разбиения и регистрацию нескольких функций обратной связи. Листинг 11.1. Регистрация функций обратной связи дпя мозаичного разбиения: гезз.с №(тибет САССВАСК №беттпе САС(ВАСК №Епбтт /' Часть опона инициапизации тп!г() '/ гоЬ) = В1цМентезз О; В1цтеззса11ьасх(гаь), сгц ТЕ55 НЕРТЕХ, б1уеггекзбч); Вгцтеззсащоаси(гоо), 610 ТЕ55 ВЕ61М, Ьехтпсащоасх); Вгцтеззсаг(васк(гов), бгв ТЕ55 Ейв, епбсаПЬаск); В1цтеззса11ьаск(гоь), Ыц ТЕ55 ЕРРОР, еггогСа11Ьаси): /' Регистрация процедур обратной связи В1цтеззса11ьаск() '/ чотб САС(ВАСК Ьедтпса11ьаск(бгепци иьтсп) ( П1веб(п(нл!сл); ) 70(О САСКВАСК епдса11Ьас«(чо(д) ( ПТЕпд(); ка!д САССВАСК еггогса11Ьас«(6(епиш еггогсоде) ( сопят СьиЬусе 'езсг!пбы езтг!пп = В1ипггогптг!пп(еггогсоде); трг!птт(зтдегг, "Ошибка разбиения: хз)п", езгг!пп); ех!1(О); ПРИМЕЧАНИЕ Приведение типов ((уре сазбпй) функций обратной связи — дело непростое, особенно если вы хотите получить код, выполняемый н в Мигом й УУ(пбоч/в, н в ()Н!Х.

Чтобы выполняться под ЧУ)пбоч/з, программы, объявляющие функции обратного вызова, наподобие (евз.с, требуют указания обозначения САССВАСК прн объявлении функций. Если указать пустое определение С/1ССВАСК (как ниже), зто позволит коду одинаково хорошо запускаться как в М(егози(( уу(пбочкв, так н в ОН(Х: №!Риде( СА««ВАСК №Пет!пе САССВАСК №епд!т чо(и СА(КВАС« са11Ьас«гипс(!оп(...) ( В листинге 11.1 для параметра обратной связи 6«О ТЕ55 уЕПТЕХ просто зарегистрирована команда к1уегтехЗОч(), и передаются только координаты каждой иршины. Если вы хотите задать болыпе информации для вершин, например цвет, пормаль к поверхности или координаты текстуры, вам требуется более сложная процедура обратной связи. Листинг 11.2 включает в себя начало другого объекта Разбиения, полное описание находится в примере тезз.с.

Здесь зарегистрироилная функция чегтехСа11Ьас«() ожидает поступления аргумента, являюще- ксЯ Указателем на шесть значений с плавающей запатой двойной точности: хъ У- и г-координаты и значения красного, зеленого и синего компонент цвета вершины. Л Регистрация функций обратной связи "/ и(Е САССВАСК чегтехса11Ьас«(6«чо!Ь *чегтех) продолжение р йистииг 11.2.

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

Тип файла
PDF-файл
Размер
56,35 Mb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

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