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

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

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

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

444 Глава 12 ° Вычислители и МОКВВ ставлены вершинами, цветовыми данными ВОВА, векторами нормалей или координатами текстур. Например, с помощью 6С ИАР1 СОСОК 4 вычислитель генерирует цветовые данные кривой в четырехмерном (ВОВА) цветовом пространстве. Вы можете также использовать значения параметров из табл.

12.1 для того, чтобы разрешить применение вычислителей перед их вызовом. Передача соответствующего значения в к1ЕпаЬ1еО или я10>'ваЬ(е() включает или выключает вычислитель. Аргументы ну и и2 указь>вак>т диапазон значений переменной и. Переменная шага по индексу (згпт[е) — зто количество значений с одинарной или двойной точностью в каждом блоке памяти.

Таким образом, она задает смешение между данными двух последовательных точек. Порядок оптег — зто степень многочлена плюс 1, он должен соответствовать количеству контрольных точек. указатель рот(з ссылается на первую координату первой контрольной точки. Для нашего примера нужно использовать СЛЕдуЮщуЮ СтруКтуру рО>ЛГВ> (6((1Оат *) (ЕкС11рО> П(В [8) . Х). Таблица 12.1.

Типы контрольных точек для д[Мар1*() Пояснение Параметр Одновременно могут использоваться несколько вычислителей. Так, если определены и активны вычислители 6( МАР1 ЧЕКТЕХ 3 и 6( ИАР1 СОСОК 4, вызовы 61Еча1Соого1О генерируют сразу позицию и цвет. Но одномоментно допустимо задействовать только один вычислитель для вершин, хотя определить можно оба, Аналогично, в текущий момент активен может быть лишь один вычислитель текстуры.

Вместе с тем вычислители могут быть задействованы для генерирования любого сочетания вершин, нормалей, цвета и координатных данных текстур. Если вы определите и включите более одного вычислителя одинакового типа, будет использоваться предполагающий большую размерность, Для обсчета уже определенного и активного одномерного отображения исполь- зуйте команду 61Еча1Соогп1* О. чо[т[ 01Еча1Соогп1[[с[)(ТУРЕ и); чо[т[ 61Еча1Соого1[Ы)ч(ТТРЕ "и); Запускают вычисления ранее определенных одномерных отображений.

Аргу- мент и — зто значение (или указатель на значение в векторной версии коман- ды) координаты области. 6( МАР1 ЧЕКТЕХ 3 6( МАР1 ЧЕКТЕХ 4 6( МАР1 ТКОЕХ 6( МАР1 СОСОК 4 6( МЯР1 МОКМА( 6( МАР1 ТЕХТОКЕ СООКО 1 6С МАР1 ТЕХТБКЕ СООКО 2 6( МАР1 ТЕХТОКЕ СООКО 3 с х-, у-, т-коордн наты вершин х-, у-, т- н и-коордннвты вершин Индекс цвета К, 6, В, А Координаты нормали в-коордннатв текстуры в- н 1-координаты текстуры в-, Ь н т-координаты текстуры вьт-, г- н сгкоордннаты текстуры Вычислители 445 В процессе вычисления для обрабатываемых вершин генерируются значения цвета, индекса цвета, векторов нормалей и координат текстур.

Вызовы к! Е ча1Соо гб" () не используются для текущих значений всех упомянутых данных. Команда 1!Еча1Соогб*() не изменяет текущие значения. Определение равноотстоящих координат в одном измерении Вы можете использовать к(Еча!Соогб1() с любыми значениями и, по на практике чаще применяются равноотстоящие (эквидистантные), как в листинге 12.1. Чтобы получить такие значения, определите одномерную сетку с помощью х!Иар6г1б1'() и тогда уже применяйте к ней к!Еча1МезН1(). | чо1г! я1Иарбг1б1(Я)(С(.!и! п, ТУРЕ и1, ТУРЕ и2); Определяет сетку между значениями и1 и и2 с шагом п, то есть зквидистантную. чо!б В! Еча1Иезп1(С!.епшп тес(е, С!1пг р1, С(лп! р2); Применяет текущую определенную сетку ко всем включенным вычислителям.

Режим тоЫе выбирается из двух: 6с Р01ИТ или 6( (1ИЕ, в зависимости от того, как вы хотите нарисовать кривую — точками или соединительными линиями. Этот вызов действует так же, как В! Еча1Соо гб1() для каждого шага отр1до р2 включительно, где 0 <р1, р2 < п. Программно это зквивалентно коду В!ВеВ1п(6( Р01ЙТ5); /' ипи к!Век1п(6( (1ИЕ 5ТВ1Р); */ 1ог (! = р1; 1 <= р2; !++) к!Еча!Соогб1(о1 + 1*(о2-о1)/и); а!Епб(); стой лишь разницей, что, если Е = 0 или! = и, команда В! Еча)Сов гб1() вызывается со значениями и1 или и2. Двухмерные вычислители Действия в двух измерениях подобны одномерному случаю, за исключением тою, что все команды должны принимать лва аргумента — и н о. И, конечно, точки, цвета, нормали или координаты текстур должны относиться к поверхности, а не к кривой.

Математически фрагмент поверхности Безье представляется так: 5(и,п)=х ~х ~В,"(и)В, (п)Р„, -а,-о где Р, — это каждая из и ч и контрольных точек, а функции  — те же самые мноч гечлены Бернштейна для одного измерения. Как и раньше, значения Рь могут представлять вершины, нормали, цвета или координаты текстуры. Процедура использования двухмерных вьгчислителей подобна одномерному случаю. 1. Определите вычислитель(-и) с помощью к1Иар2* (). 2. Включите их передачей соответствующего значения в е!Епаб!е(). 3. Вызовите их посредством В!Еча1Соогб2() (между к!Вее1п() и В!Епб()) или указанием и последующим применением сетки с помощью к!Иар6г1б2() и а!Еча!Мезв2().

446 Глава 12 ° Вычислители и М()яви Определения двухмерного вычислителя и вычисления для него Используйте команды к1Мар2» () и к1Еча1Соога2* () для определения и вызова двухмерных вычислителей. чо]г[ я1нар2(Ы](С].епшп Гагйед ТУРЕ ит, ТУРЕ и2, С].шг изтг[г[е, С].[п( иогг]ег, ТУРЕ от, ТУРЕ а2, Сйш1 ш(г[ае, С].[п[ аогг[ег, ТУРЕ рот(з) Аргумент гагяег может принимать значения из табл. 12.1, с той разницей, что подстрока МАР1 замещается на МАР2. Как и прежле, эти значения также используются с к1Епап[е() лля включения соответствукяцего вычислителя.

Минимальное и максимальное значения и и а задаются как и1, и2, пТ и п2. Независимые аргументы изтгЫе и шйЫе задают количество значений с одинарной и двойной точностью между значениями переменных, позволяя пользователю выбрать прямоугольник контрольных точек из болыпего массива. Например, если данные представлены в виде 6С(1оаг ст1ро! птз [100] [100] [3] и вы хотите использовать поднабор 4 х 4, начинающийся с с(1ро! пгз [20] [39], установите изтги]е равным 100* 3 и штг[г[е равным 3. Начальная точка, ро[птж должна быть задана как Ьс 11ро! п та [20] [30] [0]. Наконец, порядки иогг]еги гоп[ег могут быть различны; тем самым поверхность можно «сшивать» одновременно, например, из кубических и квадратичных лоскутов. чон] я1Еча1Соога2([г])(ТУРЕ и, ТУРЕ г); чо[г1 БТЕча1Соога2(Ы)ч(ТУРЕ "иа]иез); Запускают вычисления лля определенных ранее двухмерных отображений.

Аргументы и н а — это значения (или указатели на значения и и а в векторной версии команды) координат области. Если включены вычислители для вершин(61 МАР2 ЧЕМТЕХ 3 или 6С МАР2 НЕКТЕХ 4), нормаль к поверхности вычисляется аналитически. Эта нормаль связывается со сгенерированными вершинами, когда активна автоматическая генерация нормалей, включаемая передачей константы 6С АОТО НОРМА( в Б1Епав[е(). В противном случае для порождения нормали используется соответствующее доступное отображение. Если такого отображения нет, используется текущая нормаль. Пример: поверхность Безье Программа из листинга 12.2 рисует каркас поверхности Безье с помощью вычислителей, выглядящий так, как на рис. 12.2.

В атом примере поверхность образуется девятью кривыми линиями в каждом направлении. Каждая кривая рисуется 30 отрезками. Для получения законченной программы лобавьте в пример процедуры гезЬаре() и ва! и() из листинга 12.1. Рис. 12.2. Поверхность Безье Вычислители 447 Листинг 42.2. Поверхность Безье: Ьегвог(.с ОС!1оаг стг1Ро«п(5(4](4)(3] = ( ((-1.5, -1.5, 4,8), (-8.5, -1.5, 2,0), (0.5, -1,5, -1.0), (1.5, -1.5, 2.0)), ((-1.5, -0.5, 1.8), (-0.5, -6.5, 3.8), (8.5, -8.5, 9.8), (1.5, -0.5, -1.0)), ((-1.5, 0.5, 4.0), (-6.5, 0.5, 0.6>, (8,5, 0.5, 3.6), (1.5, 6.5, 4.0)), ((-1.5, 1.5, -2.0), (-0.5, 1.5, -2.0), (0.5.

1.5, 0.8), (1.5, 1.5, -1.6)] чо«б б!«р1ау(чо«б> ( (пг «, 1: В)С>еаг(ас СОСОа ВОРРЕВ В)т ] ВС ОЕРтН ВОРРЕВ В)т>; В>Со>огз((1.8, 1.О, 1.О>; В(Роаьна(г!х О; 61аотагет(95.8, 1.0, 1.9, 1.0); (ог (> = 8; > <= В; )++) ( 81еее!п(ес ШИЕ 5ТК)Р>; таг (! = 9; ! <= 39; «+«) В)Еча>соогбзг((осшоа(>«/ЗО.Е, (ОС((о»1>1/В.О>; 61Епб(); 618«В«п(ОС С)НЕ 5та)Р>; Гог (! = 0; ! <= ЗО; !++) 61Еча1соогб2(((ОС«1оа()1/В.е, (01(1оат>«/36.8); 61Епб(),' В(Рорна(г«х(); В>Р(оан(>; ) чо(б !п«1(чо«б) 91С1еагСо1ог(0.0, 0.8, 9.8, 9.0); В>Марг((ВС МАР2 нватЕХ З, О. 1, З, 4, О.

1, ш, 4, астг>ро!пта(8) (8) (9)>. 61Епаб)е(вс НАР2 НЕКТЕХ 3); 61иарвг«02«(26, 0.0, 1.0, 20. 0.9, 1.6); В)Епао>е(вс ОЕРти тввт>; 615набенобе)(вс Р!.АТ); Определение равноотстоящих координат в двух измерениях «Двухмерные» команды 81нарбг! 02* () и 81Еча1Мезн2 О подобны «одномерным» версиям, с той разницей, что первые оперируют двумя переменными — и и О, чо?<? 81нарбг! 02(ИНС??п( пи, Т]РЕи1, ТУРЕи2, С?апг по, ТУРЕ 01, ТУРЕ 02); чо?с? а1Еча1невн2(С?.епцш тоНе, С??п1 !1, С??п1 !2, С??п(11, С?ап1/2); Определяет двухмерную карту сетки, от и1 до и2 с шагом пи, и от 01 до 02 с шагом ло (81МарБ г ! б2' () ), а затем эта сетка применяется ко всем включен- 443 Глава 12 ° Вычислители и ИОКВ5 ным вычислителям (В1еча1иеял2 () ). единственное существенное отличие от одномерного варианта в том, что для В1Еча1Иезл2 () аргументом тог/е можно задать константу 6С Р1СЕ, а не только 6С Р01МТ или 6Е Е1МЕ.

Эта константа вызывает генерирование закрашенных полигонов с помощью примитивов четырехугольной сетки. Если говорить точнее, В1Еча1Иеяп2() — ближайший эквивалент одного из следующих трех фрагментов кода. (По той причине, что, когда ! равна пи или / — ло, параметр точно равен и2 или 02, но не и!+ ли х (и — и1)//ли, которое может несколько отличаться вследствие ошибки округления.) 818еВ!п(6С Р01МТ5); /* режим == 6С Р01МТ '/ !ог (! = пи1; ! <= пи2; (++) гог (1 = пч1; 1 <= пч2; )++) 81Еча1Сооги2(и1 + )*(и2 - и1)/пи, ч1 + 1'(ч2 — ч1)/пч); 51Епо(); или гог (! = пи1; ! <= пи2; з++) ( /* режим == 6С (1МЕ '/ 818еа(п(6( (1МЕ5); Тог () = пч1; 1 <= пч2; )'++) В)еча1Соого2(и1 + ! *(и2 - и1) /пи, ч1 + ) '(ч2 - ч1) /пч); 81ЕпоО; гог (1 = пч1; 1 <= пч2; 1++) ( 818еа(п(6С (1МЕ5); гог (! = пи1; ! <= пи2; (++) 81Еча1Сооги2(и1 ч (*(и2 — и1)/пи, ч1 + 1*(ч2 — ч1)/пч).' 81Епи(); ) или !ог (! = пи1; ! < пи2; !«) ( /" Режим == 6С Р166 */ 81веа(п(6( ООАО 5ТВ1Р): гог (1 = пч1; ) <= пч2; 1++) ( 81Еча1сооги2(и1 + !'(и2 — и1)/пи, ч) + )'(ч2 — ч1)/пч); 81Еча1Соого2(и1 + (!+1)*(и2-и1)/пи, ч)<1*(ч2 — ч1)/пч); В1Епи(); ) Листинг 12.8 показывает различия, которые нужно внести в листинг 12.2, чтобы нарисовать поверхность Безье, используя 81Иар6г!02() и В!Еча1Иезв2() для разбиения квадратной области на равномерную 8 х 8 сетку.

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

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

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