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

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

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

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

ех55, Ох55, Ох55, ОхАА, ОхАА, ОхАА, ОхАА, вх55, Ох55, ех55, вхАА, ОхАА, ОхАА, ОхАА, вх55, Ох55, Ох55, вхАА, ехАА, ОхАА, ОхАА, вх55, Ох55, вх55, вхАА, вхАА, ехАА, ОхАА, ах55, Ох55, Ох55, ехАА, ехАА, вхАА, ОхАА, Ох55, Ох55. Ох55, вхАА, ехАА, ОхАА, ОхАА, ех55, Ох55, Ох55, 9161еаг(6С Сосок ВОГГЕй 91Т); 91со1огзт(1.9, 1.9, 1.8); /* рисуем один многоугольник с заливкой */ /* затем два фактурных многоугольника '/ 91аестт(25.8, 25.9, 125.0.

125.8); 91Епаъ)е(6С РОСУООН 5Т1РРСЕ); 91Ро(Увоп511РР)е(11У>; 91аес11(125.0, 25.8, 225.8, 125.0); 91Ро1узоп511рр1е(на111опе); 91аесСГ(225.8, 25.9, 525.0, гг5.9>; 9101зав1е(6С РОСНООМ 5Т1РРСЕ); 91Г)изи(); Ох55. Ох55. вх55. Ох55, вх55, Ох55, вх55, Ох55, ех55>; чо!О 1п(С(чо10) ( 91С1еагСо1ог(0.0, 0.0, О.О, 0.0); 915ьаееиоее1(61 ГСАТ); ) чо10 гезьаре(1пт н, 1пС П) ( 91Н(енрогс(8, О, (6сз1ае() н, (Оса!се!) П>; 91насг!хноее(6С Рао)ЕСТ!ОН): 9)ьоаогеепС(Су(); 9)оОГСПого(8.9, (Оьеоов)е) и, Е.в, (6СОоов)е> И); > тпт ма1п(1пС агвс, сьаг'* агйч) ( 91оС!п(С(аагйс, агзч); 91от1п1101зр1ауиоее(ОСОТ 51МОСЕ ~ ОСОТ 968); 91и11п(СН1пеон51зе(358, 158); 91мтсгеатеи(пеон(агах(8>); 1птС(); 91м101зр)ауропс(01зр1ау); 81итйезьареГмпс(гезиаре); 91отиа(пьоор(): гетигп О, Для достижения максимальной эффективности от хранения фактурных образцов используйте списки отображения. (См.

раздел «Философия проектирования списков отображения» главы 7). Отображение точек, линий и многоугольников 71 Маркирование граничных ребер многоугольников ПРИМЕЧАНИЕ Орепбь умеет рисовать только выпуклые многоупзльники, но на практике используется множество невыпукпых многоугольников. Для рисования их обычно разбивают на выпуклые — обычно треугольники, как показано на рис. 2.12, а затем рисуют треугольники. Конечно, тогда не будет работать функция о)Ро(уйопМобе() для рисования контура, так как будут отображены все внутренние контуры треугольников. Для решения этой проблемы можно указать Орепби какие отдельные вершины определяют границы.

На основании этой инфориации Орепць назначает каждой вершине бит-идентификатор того, принадлежит она границе или нет. Затем при рисовании многоугольника в режиме О1 11НЕ неграничные отрезки не рисуются. На рис. 2.12 штриховые линии показывают добавочные нерисуемые границы. Рис.

2.12. Разделение невыпуклых многоугольников По умолчанию все вершины помечаются как определяющие границу, но можно вручную контролировать установку признака грапицск с помощью команды я1Ебяер1аб*(). Эта команда используется между операторными скобками к1Вей(п () и а1Епб () и применяется ко всем вершинам, определяемым за ней, до следующего вызова В1ЕббеР1аа(). Она применима только к вершинам многоугольников, треугольников и четырехугольников, но не к вершинам, определенным для разбивки треугольников или прямоугольников. чоЫ В1Еббер1аа(СЕЬоо1еап))ай); чоЫ а1ЕббеГ1айч(сопзг 01.Ьоо!сап "~1ай); Определяет, относится ли вершина к границе многоугольника. Если ((ай равен 61 Тй() Е, флаг краев устанавливается в ТК0 Е (по умолчанию) и любая вершина полагается относящейся к границе до следующего вызова этой функции с~!ад, равным 61 ГА15Е.

Например, программа из листинга 2.7 рисует контур, показанный на рис. 2.13. Листинг 2.7. Пометка границ многоугольника а)Ро(увопиобе(б1 Равит АНО ВАСК, В( Г(НЕ); а)зей(п(бг РО(убОН): й(Ебаег(аа(йь таЧЕ); В1уегтех)тч(Ч9); В1Ебаег1ак(ьс ГА(5Е); В)уегтехзтч(Ч1); В1Ебвег1ак(61 Тазе); В)Чегтехзтч(Ч2)', а1Епб(); 72 Глава 2 ° Управление состоянием и рисование геометрических объектов чг Ч1 чо Рис. 2.13.

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

Освещение — отдельная большая тема — обсуждается в главе 5, но поскольку нормали определяются вместе с заданием геометрии объекта, рассматриваются они здесь. Функция а1йогйа1*() используется для установки текущей нормали, определяемой значением аргумента. Последую<цие вызовы а1Чегтех* О связывают определяемые вершины с текущей нормалью.

Часто каждая вершина имеет собственную нормаль, что влечет серию различных вызовов, как, например, в листинге 2.8. Листинг 2.8. Нормали к поверхности в вершинах В1веа(п <61 РО(У60М); В)йогов(З(ч<пв); В!Чег<ехЗ(ч<чз); В1йогва<3(ч(п1); В1Чег(ехЗ(ч(ч1); В1йогва13(ч(п2); В1чег(ехЗ<ч(ч2); В1йагва13(ч(пЗ); Х1Чег(ехЗ(ч(чЗ): В1Епо(); чоЫ а1йага<а13(Ьз?г??)(ТУРЕ лх, ТУРЕ лу, ТУРЕ пг); чо?<? к1йогва13(Ьз?<??)ч(сонат ТУРЕ "о); устанавливает текущие векторы нормали согласно аргументам.

Не векторные версии (без ч) имеют три аргумента, определявшие вектор нормали (лх, лу, ва). Кроме того, есть векторная версия функции (с ч), принимающая массив из трех элементов для определения нужной нормали. Скалярные версии Ь, з и 1 принимают значения в диапазоне [-1.0, 1.0]. Массивы вершин 73 Нет никакой магии в нахождении нормалей к объекту — это некоторые вычисления, которые включают в себя вычисление производных. Но схожий эффект дают приемы, раскрытые в приложении Д.

Если это для вас не откровение, или если вы предпочитаете готовые результаты, или если вы не хотите использовать освещение, можете и нс читать это приложение. Конечно, в любой точке поверхности есть два перпендикулярных вектора, направленных в противоположных направлениях. Нормалью считается тот, что ориентирован вовне от моделируемой поверхности. Если нужно обратить внешнюю и внутреннюю части модели, измените каждый вектор нормали из (х, у, х) В ( — х, — у, -х). Помните, что векторы нормали определяют только направление н их длина не имеет значения. Нормали могут быть любой длины, но в конечном счете перед вычислением освещенности они все преобразуются к единичной длине. (Такой вектор называется нормализованным.) В общем, вам нужны нормализованные векторы нормали. Для получения вектора нормали единичной длины разделите каждую его составляющую х, у, г на длину нормали: )Т'7.* .

Векторы нормали нормируются каждый раз при выполнении модельных преобразований — а именно при повороте и параллельном переносе (см, главу 3). Если вы выполняете нестандартные преобразования (такие, как масштабирование или умножение на матрицу сдвига) или определяете несдиничные нормали, можно автоматически нормализовать ваши векторы нормали после преобразований— командой Х1ЕпаЫе(ОЕ ИОРИАЕ17Е).

Если вы используете единичные нормали и выполняете только однородное масштабирование (одинаковое масштабирование значений х, у и г), включите режим ОЕ РЕ5САЕЕ ИОРИАЕ. Тогда нормали будут масштабироваться к единичной длине постоянным множителем, полученным из матрицы модельно-видовых преобразований. Помните, что автоматическая нормализация или масштабирование обычно требуют дополнительных вычислений, которые могут снизить производительность ваших приложений. Масштабирование нормалей с помощью ОЕ РЕ5САЕЕ ИОРИАЕ обычно менее времяемкое, чем полная нормализация с помощью 61 ИОРИАЕ! 7Е.

По умолчанию автоматическая нормализация и масштабирование отключены. Массивы вершин Разумеется, вы уже заметили, что в ОрепбЕ рисование графических примитивов складывается из множества вызовов функций. Так, рисование 20-стороннего многоугольника сопровождается 22 вызовами: один — к1йея1п О, по одному вызову для каждой вершины, и, наконец, вызов я1Е по' () . Дополнительная информация, такая как в двух предыдущих примерах кода (флаг краев или нормали к поверхности), может привести к удвоению или утроению числа вызовов функций, 74 Глава 2 ° Управление состоянием и рисование геометрических объектов необходимых для построения одного геометрического объекта, и, соответственно, к большим задержкам и падению производительности.

Дополнительной проблемой является избыточная обработка вершин, общих для смежных многоугольников. Например, куб на рис. 2.14 имеет 6 лицевых граней и 8 общих вершин. И, если действовать стандартно, каждая вершина будет описана три раза — для каждой лицевой грани, к которой она относится. Таким образом, будет обработано 24 вершины, в то время как достаточно восьми. Рис. 2.14. Шесть граней. Восемь общих вершин ОрепСЕ предоставляет набор функций для работы с массивами вершин. Массивы позволяют определять большое количество информации, связанной с вершинами, и получать доступ к этим данным посредством небольшого количества вызовов функций.

В нашем примере все 20 вершин в 20-стороннем многоугольнике могут быть помещены в один массив и обработаны одной функцией. Если для каждой вершины также определены векторы нормалей, все 20 нормалей к поверхности могут быть помещены в другой массив и также обработаны одним вызовом. Объединение данных в массивы увеличивает производительность приложений за счет безызбыточной обработки общих вершин и минимизации числа вызовов.

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

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

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

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