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

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

PDF-файл М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006), страница 104 Инженерная графика (39024): Книга - 5 семестрМ. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006): Инженерная графика - PDF, страниц2019-05-11СтудИзба

Описание файла

PDF-файл из архива "М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006)", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 5 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 104 страницы из PDF

Соответствующие записи реакции обрабатываются в процедуре ргосе5 5 Н1 сз (), а массив записей распечатывается. Первый треугольник генерирует запись, второй — нет, а третий и четвертый генерируют одну запись на двоих Листинг 13.2. Пример выбора: зе!есс.с уоЗо огаитг1апз1е(6(с1оас х1, 6((1оас у1, 61(1оас х2, 61(1оас у2, 6(с1оас хз, 6((1оас уз, 6(е1оас с) ( 61вех1п(6( Та1Ан6(Е5); В(Чег(ех31(х1, у1. с); 61ЧеггехЗС(х2, у2, х); В1НеггехЗС(хЗ, уЗ, с); В1Епо(); ) уо1О ОгаиЧЗеиЧосоее(6(С1оаС х1. 6(С1оаС х2.

6(С1оаС у1. 6((1оаС у2, 6111оаС с1, 6(С1оаС с2) ( В16о1огЗС(1,0, 1.В, 1.В); 61вех!п(6( 11ИЕ (ООР); В1Чег(ехЗС(х1, у1, -с1); лродолхгеиие Ф Выбор 473 рг(пСТ(" число имен = аб)п", павеь); р(г++; Рг7пСГ(" 21 = йй;", (Г)оаС) 'РСг/Вх/ГСТС((Г); РСг++; Рг(п(Е(" 22 = %91п", ((1оаС) 'РСг/Вху(ГГ((ГГ); РСг++; рг)псс(" имя = "); Сог () = 0; ) < навея; )++) ( /* для каждого имени */ рг(пСГ("Жб ", 'рег); р(г++; ) рг!пСГ("сп"); ) ) «бес(пе ВОР512Е 512 чо!б ье1есСОО)ес(а(чо(б) ( 6(о(пС ье1есСВнс[ВОЕ512Е]; 6()пС П!Са; 515е1есСВо(сег(ВОР512Е, ье1ессВос); (чо)б) 81йепбегМобе(6С 5ЕСЕСТ); 51[о(Сйавеа(); 81Роапйаве(8): 51Риалйа(г(х(); 5(йасг(хМобе(6С РНО)ЕСТ!ой); В)сааб[барс(су(); 510г(по(9,9, 5.8, 9,0. 5.8, 0.9, 19.8); 51йа(г(хйобе(6( МООЕСЧ1ЕН); 51Соаб1бепС!Су(); 51(оабйаве(1): бгануг(ап81е(2.9, 2.8, 3.0, 2.0, 2.5, 3.8, -5.0); 51(оабйаве(2); бганТг(ап81е(2.9, 7.0, Э.О, 7.0, 2.5, В.О, -5.0); 51Соабйаве(Э); бгаиТг(ап81е(2.8.

2.0, 3.8, 2.8, 2.5, Э.О, 9.0); бгануг!ап81е(2.9, 2.0, 3.0, 2.9, 2.5, 3.9, - 10.8): 51Рорйа(г!х(); 515)мал(); СИ!а = 81йепбегМобе(6С КЕНОЕЙ); ргосеаанзся(исса, ае1ессВог); ) ча(б ! п! С (чо! б) ( 51Епао)е(6С ОЕРТН ТЕ5Т); 515лабеМобе1(6( РСАТ),' ю(б б(яр1ау(чо)б) ( 8161еагСо1ог(8.9, 8.0, 0,0, 9.0); 5161еаг(6( СОСОК ВОРРЕЙ В!Т [ 6С ОЕРТН ВОЕЕЕН 81Т); продолжение нх 474 Глава 13 ° Выбор и обратная связь Листинг 13.2 (продолженое) бган5сепе(); зе1ессоь]ессз(): В1Е105П (); !пт ма!п(тпт вгзс, спвг'" агхч) ( В1цс1птт(йвгзс, агзч): В!цс(п!10!зр]вунобе(нсвт 5!Мв(В ( 0(вт ааз ~ 0(вт ОВРти); В1цт1п!СИ!пбон5!зе(2ВВ, 209); $1011п!тытпбонР0511(оп(!00, !ВВ)! В!о!стев!ен!пеон(агзч(В]); тптс(); В!о!в!яр!аурцпс(0!зр(ву); В1цсМв!псоор(); гесцгп 9; ) Выбор с помощью указателя мыши Процесс, описанный в предыдущем разделе, можно распространить на выбор объектов с помощью указателя мыши (р]с]с]пя).

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

Таким образом, во время такого выбора вы обычно определяете, какие объекты отображаются рядом с указателем. Выбор с помощью указателя организуется почти так же, как обычный режим выбора, со следующим основными различиями: ° Такой выбор обычно производится переключением состояния (!г]яяегет]) устройства позиционирования. В следующем примере кода нажатие левой кнопки мыши вызывает функцию, выполняющую выбор.

° Вы используете подпрограмму-инструмент а1цр(с]сна!г(х() для умножения текун!ей матрицы проекции на специальную матрицу. Эта процедура должна быть вызвана до операции умножения матриц (такой как В1црегзрес!(че О илн а!0 гС По() ). Вероятно, вы захотите сохранить предшествующее состояние матрицы проекции, соответственно, последовательность операций будет выглядеть так: В1Масгтхнобе(60 РВО)ЕСТ!Он); В1Ризпнатг!х(); В1соаб1бепт!Су(); В1цР!сКМвтг!х(...); В1цРегзрестзче, В!Ог!По, В1цогсПо20, ог В1Егцзтцю /*...

рисование сцены дпя выбора с помощью указателя; выполнение выбора ... "/ В1Рорнвтг!х(); Выбор 475 Другой кардинально отличный способ выполнения выбора указателем мыши описан в разделе «Использование фонового буфера для выбора объектов> главы 14. Эта техника основана на идентификации различных компонентов объекта по значениям цвета. чоЫ в)иртскиаггтк(С(х)оцЫе х, С(х[оччЫе у, С1с[опЫе ю(ч//Ь, Сч(.с[опЫе ЬечяЬС, СЫп1 тле/бриг/[/ч'[); Создает матрицу проекции, ограччичивающую рисование маленькой областью окна просмотра, и умножает матрицу на текущую матрицу в вершине стека.

Центр области выбора задается оконными координатами (х, у) обычно в положении указателя лчыши. П1ирина и/ч/1(Ь и высота Ье(дЬг определяют размер области выбора в координатах экрана. (То есть ширину и высоту можно интерпретировать как чувствительность устройства позиционирования.) Массив ичекрочт[1 содержит текущие координаты окна просмотра, которые могут быть получены вызовом я\Ое1101еяегч(01 Н1ЕиРОйт, 61!01 «ч!енрог1). Результат, вырабатываемый командой д10Р!СКМатг!х(), преобразуется в область отсечения — единичный куб, где — 1 < (х, у, г) < 1 (или -ш < (шх, и/у, шз) < и/).

Матрица выбора эффективно выполняет ортогональное преобразование, сводя- в(ее область отсечения к единичному кубу. Поскольку допускаются преобразования произвольного характера, вы можете делать различные действия над облагтью выбора — например, вращать прямоугольные участки окна. В отдельных ситуациях это легче, чем задавать дополнительные плоскости отсечения для опРеделеччия области выбора. Явстипг 13.3 иллюстрирует выбор, делаемый с помощью указателя мыши. Здесь также показано, как используется множество имен для идентификации различных компонентов примитива; в этом случае объектами выбора являются строка и столбец. Рисуется сетка из квадратов 3 к 3 различных цветов. Массив Ьолггч[3] [3[ !Ранит информацию о цветах для каждого квадрата. При нажатии левой кнопки выши вызывается процедура рчсх5ч)иагез(), которая идентифицирует квадратн, выбранные мышью.

С каждым квадратом сетки связаны два имени: одно— ыя строки и другое — для столбца. Также, когда нажимается левая кнопка мыши, ювеняются цвета всех квадратов, расположенных в позиции указателя. йвстииг 13.3. Пример выбора с помощью указателя мыши: р)с)чэ()ваге,с И! Ьоагб (3) (3); / ' количество цветов для каждого квадрата */ /* Сброс значении цвета для каждого квадрата доски '/ чочб !лч 1(ччочб) ( члт гог (! = 0; ! < 3,' !««) тбг (1 = О; ) < 3; ) ++) Ьовгб(ч1[)) = 0; 3)С)еагсо!ог(9.0, 0.0, 0.0, В.О), ) и(б бгви5ливгев(01елиж жббе) продолжение Ф 476 Глава 23 ° Выбор и обратная связь Листинг 13.3 '(продолжение) 6Си(пС т, 1ог (! =О; ! <3; т++) ( )1 (жопе == 6С 5ЕСЕСТ) В(Соапнаве(!); тот (] = О; ) < 3; ) <+> ( ! 1 (врое == 6С 5ЕСЕСТ) В]РозПМаве()); В[Со[ог31((6С1[оаС) [/З.В, (6С1[оаС) >/З,В, (6С1[оаС) Ьоагв[)][>]/3.0); В[Нес» (!.

). т<). >+[); ! 1 (воде == 6С 5ЕСЕСТ) В[Роряаве(): /' Процедура ргосеззН[Сз выводит содержимое массива записей реакции "/ чета ргосеззН(Сз(6СтпС П(Сз, 6Со[пС Ьоттег[]) ( цпз[йпед тпС [, 6Со(пС [т, )), павез, *ртг; рг[пС1("записей = йд'тп", П(Сз); ртг = (6(ц(пС *) Ьц[тег; 1ог (! = О; т < п[сз; [++) ( /* для каждой записи */ павез = 'рсг! рг[п(1(" число имен для данной записи = %!['тп", павез); рсг++; Рг!'п[1(" х1 = ВВ;", (1[оаС) "РСг/Вх71111111); РСг++; р» пС1(" з2 = ХВ'тп", (1[оаС) 'р(г/Ох71111111); ртг++; рг)пС1(" имена "); 1ог () = О; ) < павез; )++) ( /' для каждого имени '/ рг!п(1("ХО ", *р(г); т 1 () == О) /' установка строки и колонки )! = 'рсг; е[зе [1 () == [) )) = "рсг: рсг++; ргтп(1("(и"); Ьоагп[тт] ())] = (Ьоагп(т!] [))] < С> Х 3: №Ое1[пе ВО15[2Е 512 чо(О ртсй5диагез((пС Ьо(Соп, зпС зеа(е, тпС х, !пС у) ( 6[и[и! яе]есСВцв[ВОР512Е]: 6СтпС Пттз; 6СтпС ч[енрагС[4]; Выбор 477 т( <Сот<оп .= 660т <Ерт ВОТТОН [[ атаев <= 6<От ООИН> гесцгп; 916ес1псевегч(6с ч1еиРОйт, чтеирогс); 915Е!ЕССВис(ЕГ(ВОГ511Е, ЗЕ1ЕССВЦГ); [ (ЧО<б) 91йЕПбЕГМОбЕ(6С 5ЕСЕСТ); 911п!<Навез(); Всрцзииаве<9); 91ИаСгтхИобе( 6!.

Рйо)ЕСТ1ОН); 91РцзПИаегтх(): 91Соаб1бепС<Су(); <' создает область выбора разиером 5х5 пиксепов в позиции указателя */ 91цР<<ййатг<х((6(боцб<е) х, (6Сбоцб)е) (ч<еирогС[3) - у), 5.9, 5.0, чтеирогС); асцОгСПого<Е.Е, 3.О, О,Е, 3.9>; бгаи5оцагез(6С 5ЕСЕСТ); 91Ма<гтхМобе(6С Рйо>ЕСТ10Н); 91Рорйа<гтх(); 91Р1цзп(); П<Сз = В>йепбегйобе<66 йЕНОЕй>; ргосеззН<Сз(и<Сз, зе1ествцс); 91цсРозсйебтзр1ау(); т чотб б<зр1ау(чо<б) ( 91С1еаг(6С СО(Ой ВОРРЕй В1Т); бгаи5пцагез(6С йЕНОЕй); В<Р)цзи<>; ) чо<б гезпаре(<пс и, тпс и) В<Ч<еирогС(9, О, и, П); 91ИаСг<хМобе(6С РВО>ЕСТ10М); 91Соаб1бепС<Су<); 91иО о20(О.О, 3.0, 9.0, 3.9): 91Ма<гтхМобе<6С НООЕСЧ1ЕИ); 91Соаб1бепС<Су(); ) <пс ватп(тпс агвс, спаг*' агеч) [ ВсцС1п<С(еагвс, агвч); В!цС1п<СОтзр1ауМобе(ОСОТ 51НОСЕ [ 6(ОТ й6В); 91цС1п<СИтпбои5<се(199, 190): 91цС1п<СИ<пбоиРоз<С<оп(199, 100); 91цССгеатеи<пбои(агвч[9[): <п<с(): продопжение,р 478 Глава 13 к Выбор и обратная связь Листинг 13.3 (продолжение) В1о1номвеуопс(р)сх5ямагев); Р1итаевларегмпс(гевларе); 51и10аар)ауямпс(б1ар1ау); 51отна1псоор(); гетогп Е, Выбор мышью с помощью составных имен и иерархической модели Составные имена могут также использоваться для выбора части иерархического объекта сцены.

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

Код был дополнен лишь манипуляциями со стеком имен в иерархической модели объектов. Листинг 13.4. Создание составных имен бган иьее1 апб Ьо)тв() ( )опв 1; бган инее) Ьобу(); (1 = 0; 1 < 5; 1++) ( 51РмвьМасг(х(); В)Рогато(у).В'1, В.Е, В,В, В1тгапв1асе((3.0, 0.0, 0.0)) 61Ривлнаве(1); бган Ьо(г Ьобу(); В1Рорнаве(); к1РорМасг1х(); бган Ьобу апб илее1 апб Ьо1тв() ( бган саг Ьобу(); З1Ровлнасг)х(); 51тгапв1асе(40, О, 20); /* положение первого колеса */ З1Ривпмаве(1)) /* имя колеса с номером 1 */ бган илее( апб Ьа1(в(): З1Рорнаве(); а1РорМагг1х(): к1Рмялнагг!х(),' В1тгапв1асе(40, О, -20); /* положение второго колеса */ Выбор 479 к1РивПйаве(2); l* имя капесв с номером 2 *I бган иПее1 апб Ьо11в(); д1Рорйаве(); к1РорйаСг!х(); М аналогичное рисование дпя двух других колес Листинг 13.5.

Использование составных имен бган тпгее свгв() ( к11п ! (навея (); Х1Ровпйа1г!х(); сгапк1вте Со !!тот саг роя!С!оп(); к)Рокпйаве(1); бган Ьобу апб илее1 апб ЬЬ1(в(): Б1Рорйаве(); Б1Рорйатг!х(): к)яовпиасг!х(); тгвпв1ате то яесопб саг ров!т!оп(); к1Рпвпйвве(2); бгви Ьобу апб ипее1 апб Ьо11в(); Б1Рорйаве(); к)Рорнатг!х(); $1РО5ПМатг!х(); тгапь1вте то тптгб свг ров!1!оп(); В1Рняпйаве(3); бган Ьобу апб ипее1 апб Ьо1(в(); Х1Рорйаве(); к1РорМасг!х(); ) Предположилт, что выбор сделан. Ниже показаны некоторые возможные возвра- иаемые из стека имен значения и их интерпретация. В этих примерах в большип- пве возвращается одна запись реакции; с(1 и с(2 — значения глубины. 2б1 б221 Явтомобиль 2, колесо 1 Корпус автомобиля 3 Болт О на колесе !автомобиля 1 1б) б2 3 3 Й б2 1 1 0 Попытка выбора за пределами всех автомобилей пусто Последняя интерпретация исходит из того, что в одной области выделения нельзя одновременно выбрать болт и колесо.

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