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

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

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

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

Если В, С и О выводятся из правила Я.О ТЕ55 ВООМОАМТ ОМЕТ, другой способ изменения ориентации — функция В1иТеззно гва1 О для изменения знака нормали. ДруГие функции задания свойств тесселяции Команда В1обетТеззРгорегтуО возвращает текущие значения свойств мозаичного разбиения. В дополнение к ней предусмотрены вспомогательные подпрограммы. Если алгоритм тесселяции применяется для генерации каркасного (мге!гаше) представления вместо закрашенных многоугольников, В1отеззногва1() может быть использована для указания направления «намотки» обрабатываемых многоугольников. чо(г! В1обеггез зР горе гту(С?Л)теззе!асог «ГеззоЬ) С1 епшп ргорегту, СЕг)опЫе »па!ие); Возвращает значение (оа!ие) свойства (рюрег(у) для объекта разбиения (геяоЬ)).

Значения для аргументов рюрегти и па!ие те же, что и для В1и Те аз Р горе г ту (). чо!«! В1 иге ззногва1(СШГеззе)агог «гезюЬ)', СЫопЫе х, СЫоцЫе у, СЫопЫе г); Определяет вектор нормали для объекта разбиения (гезгоЬ)), управляющий направлением «намотки» генерируемых многоугольников. Перед разбиением все входные данные проецируются на плоскость, перпендикулярную нормали. Далее все выходные треугольники ориентируются против часовой стрелки относительно этой нормали. Ориентировать их по часовой стрелке можно, если изменить знак нормали. Нормаль по умолчанию — (О, О, 0). При наличии представления о расположении и ориентации входных данных используйте команду В(итез зно гаа1 (), чтобы увеличить скорость тесселяции. На- г«озанчное представление многоугольников 427 пример, если вы знаете, что все многоугольники принадлежат плоскости дТг, вам подойдет вызов к\иТеззиогваЦГеззоЬ), О, О, 1).

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

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

чоЫ 61оТеззведзпРо1укоп (С)Л)гедде!агог "ГеззоЬ), чоЫ «ижг с(ата); чоЫ к1о Те з з Ела Ро1у В оп(СШ(еззе1атог *Гех«ЬЬ)); Начинают и заканчивают спецификацию обрабатываемого многоугольника и связывают с ним объект разбиения (гехчоЬ)). Аргумент изет а(ага указывает на определенные пользователем данные, передаваемые всем функциям обратной связи 6СО ТЕ55 ' ОАТА. Вызовы к1ЧТеззВек(пРо1уйоп() и 61ЧТеззЕпаРо1уВоп() обрамляют собой описание одного или нескольких контуров.

Когда вызывается В1огеззЕпОРо1уеоп(), происходит разбиение, то есть генерация мозаики нз треугольников и их отображение. Функции обратной связи и свойства тесселяции устанавливаются командами к1ЧТеззСа11ЬасК() и В1отеззРгорег1у(). чоЫ к1отеззвеяз пСоптоог(С(Л)геззе1а(ог 'ГеззоЬу); чоЫ я 1 о ге з з Е пО С о пса о г(С(Л)геззе1асог "ГеззоЬ)); Начинают и заканчивают спецификацию замкнутых контуров, являющихся частью многоугольника. Описание замкнутого контура включает в себя нуль и более вызовов В1отеззчеггех (), определяющих вершины.

Последняя вершина каждого контура автоматически замыкается на первую. Если говорить практически, для определения контура достаточно трех вершин. чоЫ В1 оТ ее з Че г с е х(С1Л)геззе1а( ог»геззоЬ) СЫопЫе своп«з[3], чоЫ»о«тгех г(ага); Задает вершину текущего контура объекта разбиения. Массив соог«(з содержит координаты вершины в трехмерном пространстве, а сеггех «(ада — это указатель, посылаемый функциям обратной связи для параметров 6СО ТЕ55 ЧЕРТЕХ или 6СО ТЕ55 ЧЕРТЕХ ВАТА. Обычно массив оегтех «(ата содержит координатную и цветовую информацизо для вершины и текстур, нормали к поверхности или любую другую, требуемую программе.

428 Глава 11 ° Мозаичное представление и поверхности второго порядка В примере те за. с та часть, которая вошла в листинг 11.3, определяет два многоугольника. Первый — это прямоугольный контур с треугольным отверстием, а другой — равномерно окрашенная гитиконечная звезда, то есть самопересекающийся контур. С целью увеличения быстродействия оба многоугольника сохранены в списках отображения. Первый многоугольник состоит из двух контуров; внешний обходится против часовой стрелки, а «дыр໠— по часовой стрелке. Массив зьзг содержит координатные и цветовые данные второго многоугольника, Назначенные для него функции обратной связи Нег!ехСа!!Ьаса() при разбиении обращаются к этим данным.

Важно, что каждая вершина расположена в памяти отдельно, поскольку ее данные це копируются к[итеззнег!ех(); сохраняется только указатель на оеггех ([а(а. Если программа станет записывать данные для разных вершин в одно и то же место, результат может оказаться далеким от желаемого. ПРИМЕЧАНИЕ Может показаться, что двойное определение координат дпя ОЮТеззуепех() — сначала в соопи и затем в чецех да(а — избыточно; однако нужны оба параметра. Дублируются только координаты вершины, а кроме них массив чепех ба!а содержит другую полезную информацию. Листинг 11.3.

Определение многоугольника: !евз.с 6(еоиые гесс[4] [3] = (50.0, 50.0, 0.0, 209.0, 50.9, 0.9, 209,0, 200.0. 0.0, 50.0, 290.0, 9.0),' 6(сапные гг([3][3] = (75.8, 75.0. 0.0, 125.8, 175.0. 0.0, 175.0, 75.0, 9.0); 6(.иоиЫе зсаг[5] [6] = (250.0, 50.0, 0.0, 1.0, 0.0, 1.9, 325.9, 289.0, 9.8, 1.0, 1.0, 0.9. 408.0, 59.8, 0.9, 0.0, 1,0, 1.0, 259.0, 150.0, 0.9, 1.9. 0.0, 0.9, 499.0, 158.0, 0.0. О,О, 1.0, 9.0); зсагсшзт = 916епЫБ!з(2): СоЬ) = 9!ийентезз О; 9!итеззса!!Ьзсх(тоЫ, 610 ТЕ55 УЕатЕХ, 9!Уегтех)ОУ); 9!итеззса!!васк(!оЬ], 610 ТЕ55 966]й, Ьеа(пса!!васк>; 9[итеззса]1Ьасн( соЬ>, 6ЕО тЕ55 Ейэ, еппсаПЬаск>; 9!иТеззСэ11Ьаск(гоЬ>, 6СО ТЕ55 бакой, еггогСа!1Ьаск); 8]йенызс(зсагтызс.

61 сонг!се>; 915папеиоие!(61 Е[АТ>; 9!итеззвеазпяо!уаоп(тоь], йвьь); 91итеззвеа(псопсоиг(тоь]); 91итеззуегсех(соь], гесС[9], гесс[0]); 91итеззНегСех(соь], гесс[1], гесс[1]); 9\итеззуег!ех(1оь], гесс[2], гес1[2]): 91итеззуегсех(Соь), гес([3], гесс[3]); 9!итеззепосопсоиг(соь]); 91итеззвеа(пСопсоиг(тоЬ]); Мозаичное представление многоугольников 429 В)итезхиег(ех(СЬЬ], Сг((В], Сг([В]); а1итеззЧег(ех(Соь], Сг[[1), Сг![1]); В]итееаиег(ех(СЬЬ], Сг][2), Сг1[2]); 61итессЕпьсопсоиг(соь]); 61итеззЕЬЬРЬ1уаоп(СЬЬ)); 01ЕЬЬС[ВС О: 6[0 ТЕ55 ЧЕМТЕХ, чег(ехСа11Ьаск); 6СО ТЕ55 ВЕ61М, Ьеа(пСа11Ьаск); 600 ТЕ55 ЕМО.

еписа11ьасх), 600 ТЕ55 ЕММОМ, еггагса11ьаск); 6[0 ТЕ55 СОНВ1МЕ, сопЬ(пеСа11Ьасх); е]итеззса\ 1ьасх(соь], В[итеззса[)Ьаск(СЬЬ]. Е1итеззса11ьасх(СЬЬ), 01итезхса11ьаск(СЬЬ], В1итезхса11ьасх(СЬЬ], 41меисхас(хсагсс1хс + 1, 6с сомР1се); Е15ьапеиоее1(6С 5МООТН); 51итеззРгорегсу(соь], 600 те55 н]мв!м6 м0се. 6[0 те55 н1001м6 Р051т1че); В]ите55ВеаъпР01уаоп(СЬЬ], МОСС); 01итеззВеа)псопсоиг(соь]); 61итеззуеггех(СЬЬ], х(аг[0], хгаг[0]); 61итехзЧеггех(СЬЬ], хгаг[1], згаг[1]); 61итеззиег(ех(СЬЬ), хгаг[2], 5(аг[2]); 01итессиег(ех(СЬЬ], х(аг[3], зьаг[3]); 01итехзЧегтех(СЬЬ], зтаг[4]. 4Саг[4]); 61итеххЕписопьоиг(Соь]); с[итехзепиро)уапп(СЬЬ]); Е[ЕЬЬС(хС О; Удаление объекта разбиения | чо[с[ В\иве1еьеТезз(О[.П(еззе]а(ог *Геззо[[)); Удаляет указанный объект разбиения 1[еяоЬ)) и высвобождает отведенную под него память.

Советы по увеличению производительности разбиения Чтобы ваше разбиение работало быстро, придерживайтесь следующих правил; ° Кзшируйте вывод алгоритма тесссляции в списке отображения или в пользовательской структуре. Получайте координаты вершин после разбиения, то есть не забывайте пользоваться обратной связью. (Сьс. раздел «Обратная связьх главы 13.) ° Используйте к1итеззногеа1 О для задания нормали многоугольнику.

° Используйте один и тот же объект разбиения для разных многоугольников, зто быстрее, чем выделение персонального объекта разбиения каждому многоугольнику. (Преимуп(ества последнего проявляются в многозадачной, многопроцессорной среде.) Если вы больше не нуждаетесь н объекте разбиения, вы можете удалить его и освободить занимаемую им память посредством команды В100е1еьеТе55 () . 430 Глава 11 ° Мозаичное представление н поверхности второго порядка Сообщения об ошибках 6Ш Библиотека СШ предоставляет вызов, возвращающий описательную строку для кода ошибки.

Эта подпрограмма не ограничивается тесселяцией, а также действует для ошибок, связанных с Ы() ЕВЯ и квадратичными поверхностями, подобно основной библиотеке С(.. (См. раздел «Обработка ошибок» главы 14.) Обратная совместимость Если вы используете версию 1.0 или 1.1 библиотеки С1П, не удивляйтесь, что тесселятор работает медленно. В этих версиях обрабатываются только простые невыпуклые многоугольники и такие же простые многоугольники с отверстиями. Также в них не принимаются во внимание пересекающиеся контуры (нет обратной связи для параметра сОМВТме).

тесселятор версии 1.0/1.1 все еще работает в СШ 1.2 и 1.3, но его использование не рекомендуется. Тесселятор 1.0/1.1 имеет много общего с его развитым потомком. Функции к1иненТеьв() и В1иое1ететеээо используются и там, и там. Главной процедурой для спецификации вершины осталась я1иТез эче гсех () . Механизм обратной связи управляется к1итеззСа11Ьаск(), хотя регистрировать можно только пять функций из нынешних двенадцати. Ниже представлены прототипы вызовов тесселятора версий 1.0/1.1: чоЫ к1ивек1пРо1уйоп(С1ЛЛпапйи!асогОЪ) 'геззоЬ)); чоЫ я1имехсСопсоиг(С1Л)сг!апяи!асогОЪ) 'геззоЬу, С1.епиш Гуре); чоЫ 61иЕпОРо(уаоп(С1ЛСг1апйи!а(огОЪ) 'ГезгоЬ)); Самый дальний от центра контур специфицируется первым, при этом не обязательно проводить инициализацию к1инех(Сопгоиг О.

Для многоугольников без отверстий определяется только один контур, а я1и не хсСоп гои г (), соответственно, не используется. Если многоугольник состоит из множества контуров (то есть отверстий н дыр внутри отверстий), контуры описываются один за другим и каждому предшествует вызов к1инех(Соп сои г (). Процедура к1иТеззчегсехо вызывается для каждой вершины контура. Для к1инехССопсоиг() аргумент Гуре может быть равным 610 ЕХТЕМ1ОМ, 610 1МТЕМ1ОМ, 6С0 ССИ, 6С0 СИ или 6С0 0МКМОИМ. Эти параметры несут только рекомендательный характер. Если вы зададите правильные значения, процесс разбиения ускорится. Неправильные значения будут проигнорированы, но разбиение будет продолжено. Для многоугольников с отверстиями один контур считается внешним, а другой — внутренним.

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

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

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

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