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

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

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

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

В качестве упражнения можете попробовать изменить способ рисования икосаэдра в листинге 2.16 таким образом, чтобы использовались массивы вершин. Функция к1 мо11 ! ОгаиАг гауз О, как и функция В1Иот! ОгаиЕ1евепта (), появилась в ОрепС[. версии 1.4 и предназначена для объединения нескольких вызовов функции В10гаиАггауз () в один вызов. чоы В1мо11!ОгаиАггауэ(с].епцш то<ге, с]гпг "/гтхг, с1.яге[ "соил(, с[яхе! рптсоипг); Вызывает последовательность выполнеггия из рптсоипг (количество) функций В10гаиАг гау().

Аргумент то<ге определяет тип примитива, и его значения аналогичны значению аргумента функции В1ВеВ! и(). Аргументы /гтх и соил( определяют, где выполняется обработка каждого списка элементов массива. Для г-го элемента массива графический примитив строится начиная с уггхгЯ н заканчивая уггегЯ в соипгЯ вЂ” 1. Результат выполнения функции В1Ии11! ОгаиАг гауз() аналогичен выполнению Еог (! = Э; г < Рггвсоопг; г++) ( (соопс[г] > 0) В10гаиАггата(вове, Ггг»С[г], соопг[г]): ) 84 Глава 2 ° Управление состоянием н рисование геометрических объектов Смешанные массивы Ранее в этой главе (см.

раздел «Фактурные многоугольники») уже говорилос о массивах с чередованием данных — смешанных. Пусть таким будет массив ! псе ггн! пео, хранящий смешанные данные о йСВ-цвете и трехмерных коорди- натах вершин. Эти данные можно инициировать вызовами 91СО!ОгРО!пгег() и 91НегтехРО!птег(): згаг!с Оь(1оа! !пгеггн!пее() (1.0, 0.2, 1.8, 100.0, 100.6, 0.0, 1.0, 8.2, 0.2, 0.8, 200.0, О.О, 1.8, 1.8, 8.2, 160.0. 360.0, 0.0, 0.2, 1.6. 0.2. 200.0, 300.0, 0.0, 0.2, 1.0, 1,0, 366.0. 260.0, 0.0. 0.2, 0.2, 1.8, 208.0, 100.0, 0.0): Массивы такого вида можно определить, указывая смещение данных конкретно- го типа, с помощью шага по индексу.

Конечно, это нужно делать осторожно. Но также существует команда-«монстр» 911пгег1еачеодггауз(), которая позво- ляет за один «присест» сформировать несколько массивов, Функция 911птег- 1еачеаАггауз() также включает и выключает соответствующие массивы (они перечислены в разделах «Шаг 1: активация массивов» и «Шаг 2: помещение— данных в массивы»), Смешанный массив заполняется согласно одной из 14 предопределенных конфигураций, поддерживаелгых функцией 911пгег1еачеб- Аггауэ(). Так, чтобы получить активный массив !птеггн!пеп с чередованием йСВ-цвета и координат вершин, можно дать следующую команду: 911птег1еачеЕАггауз(6( СЗГ ЧЗГ, О, 1пгегтн!пеа); Она активирует массивы 6( СОСОК АРКАН и 6( ЧЕРТЕХ АРРАУ, а также отключа- ет массивы 6( 5ЕСОНОАРЧ СО(ОР АРРАЧ, 6( 1ЙОЕХ СОСОК АРРАЧ, 6( НОРНА( АРРАЧ, 6( ГО6 СООРОТНАТЕ АРРАЧ, 6( ТЕХТОРЕ СООРО АРРАЧ и 6( Е06Е Г(А6 АРРАЧ.

Этот вызов лает результат, идентичный результату работы 91601огРо! псе г() и 91НегтехР01пгег(), примененных для определения значений шести вершин в каждом массиве. Для рисования примитивов, что соответствует шагу 3, все так же вызываем 91Аггауе1евепг (), 910гаие1евептв (), 910гандап9ее1евептз () или 910гандггауз(). чоЫ 911птег1еачеОАггауз(С1еппш/огглат, СЕз(хе! 3(г(а(е, чоЫ "рот(ег) Инициализирует все восемь массивов, отключая массивы, не определенные аргументом конфигурации/от!лат, и включая те, что указаны. Аргумент/оггпат получает значение одной из 14 символьных констант, перечисленных в табл.

2.5. Значение аргумента егнг(е определяет смещение в байтах между смежными вершинами. Если оно равно нулю, подразумевается, что вершины плотно упакованы. Указатель ро!п(ег ссылается на адрес первой координаты первой вершины в массиве. Обратите внимание, что функция 911птег(еачеолггауз() нс поддерживает флаг краев. Массивы вершин 85 Механизм работы к11псег1еачеблг гауз () сложен и требует иллюстраций в виде табл.

2.5 и листинга 2.15. В этих листинге и таблице есть переменные вп е, и е„ типа ЬОО1еап, включающие или отключающие координаты текстуры, цвет и век- ТОРЫ НОРМаЛИ; ПЕРЕМЕННЫЕ зп 5, И 5„, ОПРЕДЕЛЯЮЩИЕ РаЗМЕР (ЧИСЛО КОМПОНЕНТОВ) массивов координат текстуры, цвета и вершин. Переменная т, — это тип данных для КИВА-цвета, который представляет собой массив, содержащий смешанные значения целого типа. Переменные р„р„и р„— вычисленные значения смещения для доступа к индивидуальным значениям цвета, нормалей и значения вершин, а 5 — шаг по индексу, то есть смещение (если оно нс определено пользователем) для перемещения между элементами массива. Эффект выполнения функции к11псег1еачебАггауэ() подобен результату работы последовательности команд, приведенных в листинге 2.15 со значениями из табл. 2.5.

Все операции с указателями выполняются в единицах 5!терт(6Сивуте). Листинг 2.15. Результат выполнения команды д>1п(ег>еачес(Аггауэ((оггпаС, 5(псе, ро>п(ег) 1ПС 5СГ; /* устанавливаем е<, е<, еп, 5<, 5„ 5,, С,, р,, р„ р„ и 5, как показано в табл. 2.5, и значение формата «/ зтг = зтг(бе; 1г (5сг == 0) 5СГ = 51 а10!5аЫес11епС5Сате(6( ЕООЕ ЕСА6 АМАНАТ); 510!5аыес1(еп(5Сате (6С 1МОЕХ АММАЧ); 51015аЫеСШ епС5Саее(6С 5ЕСОМОАМЧ СО(Он АММАЧ>; а10!5аЫес1!епС5Сате(6С 506 СООМО!МАТЕ АЙМАУ); >г (е<) ( а1ЕпаЫес11епС5СаСе(6С ТЕХТОЙЕ СООЙО АММАЧ); а1техсоогбро!птег(5<, 6С РСОАТ, зтг, ро!пеег); е15е 51щзаЫеС1(епС5СаСе(6С ТЕХТОМЕ СООМО АММАЧ>; (г (е,) ( а1Епаыес11епт5Сате(6( СОСОМ АСКАТ>; а1Со1огРозптег(5,, С,, атг, ро>птег+р,); ) е15е а(015аЬ>еС11ептбтате(6( СОСОК АММАЧ>! (! (е,) ( а1Епаыес1(епт5Саге(6( МОММАС АКМАЧ); 51ногиа1Ро(птег(6С РСОАТ, зтг, ро>птегар.); > е15е 51015аЫеС11епС5СаСе(6С МОМИАС АММАУ); а>ЕпаЫеС>тептзтате(6С ЧватЕХ АММАЧ); к1ЧегтехРо!птег(5., ОС ЕСОАТ, зтг, ро!птег+р,); 86 Глава 2 ° Управление состоянием и рисование геометрических объектов В табл.

2.5 буквы Т и г обозначают ТВОЕ и ЕА(56, показатели à — э!геоГ (6! 61оа1) и с — четырехкратное значение 51хеог(6$ ноуте), округленное до ближайшего числа, кратного Е. Наиболее простые форматы: 6( ЧЗГ, 6( ЧЗГ и 6( СЗГ ЧЗЕ. Для любых форматов с С40В применимы структурные типы данных или обычное приведение типов, а по указателю лежат четыре беззнаковых байта, то есть одно 32-битное слово. В некоторых реализациях ОрепС1. использование смешанных массивов может ускорить работу приложения, котла известно точное расположение данных, то есть зто случай, когда данные плотно упакованы и могут быть получены за одно обращение. Без смешанных массивов сначала определяется, как плотно упакованы данные, исходя из информации о смещении и размере.

таблица 2.5. значения параметров функции 9$1пгепеауш)Апауэ() Гогва1 ет ес еп М эс эу 1с рс рп ру 5 6( 0й516йЕО ВУТЕ 6( 0й516йЕР ВУТЕ 61 ГСОАТ 0 0 0 0 0 41 61 Г(ОАТ 61 0й516йЕО ВУТЕ 6! ЕРЗАТ 21 21 21 21 61 41 8( 6( ЕСОАТ 6( ГСОАТ ПРИМЕЧАНИЕ Функция дйптег$еауедАггауэ() только активирует или деактивирует массивы вершин и заполняет массив вершин значениями. Она ничего не рисует. Вы должны завершить выполнение, как описано в разделе «Шаг 3: раэыменование и рисование», и вызвать функцию д(АггауЕ$евепгО, д$РгаггЕ!ввела, д$РгаугаапдеЕ)евептэ() или 9$0гашАггауэ() для раэыменования элементов массивов и рисования графики.

Группы атрибутов Из раздела «Управление основными состояниями» вы узнали, как установить или запросить отдельные состояния или параметры состояния. Это неплохо, но вы можете сохранять и восстанавливать значения набора связанных параметров состояния с помощью всего одной команды. ОрепС(. объединяет связанные параметры состояния в группы. Например, параметр 6( (1йЕ В1Т сочетает в себе пять параметров состояний: толщины ли- Я.

У2Г Г Я. ЧЗГ Г 6( С408 Ч2Е Г 6$. С408 ЧЗГ Г 6$. СЗЕ ЧЗГ Г 6( йЗГ УЗГ 6( С4Г йЗГ ЧЗГ Г 6( Т2Г ЧЗГ Т Я. Т4Е Ч4Г Т 61 Т2Г С408 ЧЗЕ Т 6( Т2Е СЗГ УЗГ Т 6( Т2Е йЗЕ УЗЕ Т 6( Т2Е С4Г йЗГ ЧЗЕ Т 6$. Т4Г С4Г йЗГ Ч4Г Т Г 2 Г Г 3 Т Е 4 2 Т Г 4 3 Т Г 3 3 Г Т 3 Т Т 4 3 Г Е 2 3 Е Г 4 4 Т Г 2 4 3 Т Г 2 3 3 Г Т 2 3 Т Т 2 4 3 Т Т 4 4 4 0 2$ 0 ЗГ с с+21 с с+31 ЗГ 61 ЗГ 61 ТГ 101 21 5Г 41 ВГ с+ 21 с+ 56 51 ВГ 51 ВГ 91 12$ 11Г 151 Группы атрибутов 87 нии, состояния 6( С?МЕ 5Т?РРСЕ, шаблона прерывистой линии, фактора повтора и состояния 6С С?МЕ 5НООТН (см.

раздел вСглаживаниеь главы 6). Команды к1РизПА(тг! Ь() и к\РорАттг! Ь() позволяют сохранять и восстанавливать одновременно все пять параметров состояния. Некоторые параметры состояния включены в несколько групп. Например, 6С СО(С РАСЕ одновременно входит в наборы атрибутов многоугольников и активаций.

Начиная с версии 1.1, ОрепО?. поддерживает два различных стека атрибутов. Дополнительно к основному стеку (который хранит значения серверных параметров состояния), су)цествует клиентский стек атрибутов, доступ к которому осуществляется командами к1РизЬС1!еп(Я(тг!ЬО и к1РорС1!еп(А(тг!ЬО. В целом, использовать эти команлы быстрее, чем получать, сохранять и восстанавливать значения самостоятельно. Некоторые значения могут поддерживаться на аппаратном уровне, и получить их не всегда просто. Также, если работа идет на удаленном клиенте, все данные перемещаются по сети для их получения, записи или восстановления. Тем не менее ваша реализация ОрспСБ может разместить стек атрибутов на сервере, устранив тем самым ненужную сетевую задержку.

Существует около 20 различных наборов атрибутов, которые могут быть сохранены и восстановлены посредством функций к1РозПАГ(г(ЬО и к1РорА(тг! ЬО. Также есть два клиентских набора атрибутов, которые могут быть сохранены и восстановлены функциями В1РоэПС1! ептАтт г ! Ь() и к1РорС1! еп(А(гг ! Ь (). Как для сервера, так и для клиента атрибуты сохраняются в стеке с минимальной глубиной 16 групп. (Чтобы узнать реальную глубину стека для вашей реализации, выполните команду я16ет?птекегчО со значениями аргументов 6( НАХ АТТР1В 5ТАСК ОЕРТН и 6С НАХ С(?ЕМТ АТТР1В 5ТАСК РЕРТН.) Помещение информации в переполненный стек или ее получение из пустого вызывает ошибку.

(См. приложение Б для получения информации о том, какие атрибуты записываются для определенных значений маски, то есть какие атрибуты принадлежат определенным группам). чоЫ к1РивЬАГСг!Ь(О?.Ьй((е!Й тай); чо!о к1РорА(т г! Ь(чоЫ); Функция 61РизЬАттг1Ь() сохраняет все атрибуты, определяемые битами значения аргумента тай, в стек атрибутов, Функция к1РорПА(с г ! Ь () восстанавливает значения параметров состояния, сохраненных последним вызовом функции к1 Ро в ПА( г г ! Ь О. В табл. 2 6 приведен список возможных битов маски; они могут быть объединены логическим ИЛИ (ОК), что позволяет сохранять практически любую комбинацию атрибутов. Каждый бит соответствует набору отдельных параметров состояния.

Например, 6С С?6НТ?М6 В? Т объединяет все параметры состояния, связанные с освещением, что включает в себя цвет текущего материала, фоновый, рассеянный и отраженный свет, самосвечение, список активных источников света и направление распространения света. При вызове функции В1РорА(тг! Ь() все эти параметры восстанавливаются. Специальная маска 6С АСС АТТР?В В1Т5 предназначена для сохранения и вос- становления всех параметров состояния во всех наборах атрибутов. 88 Глава 2 ° Управление состоянием и рисование геометрических обьектов Таблица 2.6. Группы атрибутов Группа Маска Буфер накопления уоЫ Б1РизпС11епгдттгтЬ(С)?ЫйеЫ тай); тоЫ В1РорС11епСАСтг(Ь(ноЫ); Функция Б1РцзПС1(епсдтгг(Ь() сохраняет все атрибуты, определяемые пара- метром таз)г, в клиентском стеке атрибутов.

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

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

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