OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 96
Текст из файла (страница 96)
Если значение горЯайиз равно О, генерируется конус. Если координаты текстуры генерируются средствами квадратичного объекта, г-координата изменяется линейно от 0.0 при г - 0 до 1.0 при г = Ье(яЬг. Координата з текстуры генерируется так же, как для сферы. ПРИМЕЧАНИЕ Цилиндр не «закрывается» нн сверху, нн снизу, то есть диски в основаннн н в верхней точке не рисуются. чек) я1о01 зК(01Л)опас1ПсОЪ1 'с)о1у', 01х)онЫе 1ппегЯайиз, СЫопЫе оисетЯадла 01апс зЬсеж 015пт ппдз); Рисует диск в плоскости г = 0 с радиусом оигегЯайиз и концентрическим круговым отверстием радиусом (ппегЯайих Если 1ппегЯайиз равен О, отверстие не создается.
Диск разбивается вокруг оси г на количество «ломтиков» йоши (подобно ломтикам пиццы), а вдоль оси г — на концентрические кольца (ппяг). С учетом стандартной ориентации сторона +г диска считается наружной, то есть любые генерируемые нормали указывают в направлении +г. Иначе нормали направлены в направлении -г. Если координаты текстуры генерируются средствами квадратичного объекта, они изменяются линейно таким образом, что В - оитегЯайид значения координатз и гпри (К, О, 0) равны (1, 0.5), при (О, К, 0) — (0.5, 1), при ( — К,О, 0)— (О, 0.5) и при (О, -Е, 0) — (0.5, 0).
Поверхности второго порядка: сферы, цилиндры и диски 435 чоЫ 81цраг11а10! ьК(С1Л3с[паг[г]сОЬ] "гуо]]], С(.допЫе [плешах[[из, С(х]опЫе оигегяааг[ць, С].[пг ь!]сеь, С(зп( плдь, С[к[оп Ые ьгакАп8(е, С)х[опЫе ьзвеерАпя]е)] Рисует неполный диск в плоскости з = О. К неполному диску применимы те же термины, что и для полного диска: оисегйаг([из, тпегйаг((иь, ь[(сеь и ппяь. Разница только в том, что неполный диск рисуется от начального угла ьгаггАпд]е до ь(агГАпя]е + ьгееерАп8]е (ь(аг(Апре и ывеерАпфе измеряются в градусах, где 0' это осъ +у, 90' соответствует оси +х, 180' — ось -у и 270' — ось -х).
Ориентация и координаты текстуры для неполного диска определяются аналогично полному диску. ПРИМЕЧАНИЕ Дпя всех квадратичных обьектов лучше использовать *Наб!иь, Ье!ОП( и подобные параметры дпя масштабирования, чем команду д]бса)е*(], чтобы сгенерированные единичные нормали не приходилось нормализовать снова. Задавайте значения аргументов ппйь и ьтасхь отличными от 1 с целью лучшей гранупярности при расчете освещения, особенно если материал обладает высоким альбедо. Листинг 1[А показывает рисование каждого из квадратичных примитивов, а так- же влияние различных стилей.
Листинг 1$.4. Квадратичные объекты: (]пзбг[с.с Ф11пбет САЕСВАСК а)е11пе САССВАСК Еепб]т 6[юпс ьсагсс(ьт; чо(б САССВАСК еггогса11Ьаск(6(епив еггогСобе) ( СОПЬ1 6СОЬУ1Е 'ЕЬСГ(ПВ; еьтг]пх = 91цЕггогьтг1пх(еггогсобе); 1Рг1п11(ьсбегг, "Ошибка хь)п", еь1г!пх); ех11(8): ) чозб 1п!1(чозб) ( 6(ечцабг1сОЬ3 'Ооо]; 6111оат ват авЫепт[] = ( 0.5, 0.5, 0,5, 1.9 ); 6((1оас ва1 ьреси1аг[] = ( 1.9, 1.9, 1.0, 1.9 ]; 6(11оат ват ьизп(пеьь[] = ( 58.0 6С11оат 11ВЬ1 роь]1(оп[) = ( 1.9, 1.8, 1.8, 0.9 ); 6СР]оаС вобе1 авЫепт[] = ( 0.5, 8,5, 8.5, 1.0 ); В161еагсо1ог(9.8, 8.0, 9.0, 9.0): 61иатег1а11ч(6( ЕЙОМТ, 6С АМВ1ЕМТ, ваг авЬзеп(); 91иа1ег!а1(ч(6С РНОМТ, 61 5РЕСОСАК, ва1 ьреси1аг); 91натег!а1(ч(6с гноит, 6( 5н1М1ме55, ват ьп1п! пеьь): 91(1ВЫтч(6С 116НТВ, 6С Р05]Т10М, 1!ВП1 РОЬз11оп); В]с)хи!небе]гч(6( 116нт нооес АНВ]ейт, вобе1 авыепт); продолжение Р Листинг 11.4 !продолжение) 91Е»аЫе(6С !16НТ1й6); 91Е»аЫе(6( !16НТВ); 91ЕпаЫе(6! ОЕРТН ТЕ5Т); / к Создает 4 списка отображения по числу квадратичных объектов.
Демонстрируются различные стили рисования и описания нормалей к поверхности '/ зтаг!С!зС = 916епН з!з(4); Оо»1 = 91ийендоабгтс(); 91идиабгтсса!1Ьасх(цо»1, 610 ЕРМОМ, еггогСаПЬаск); 91иОиабг!сОган5(у1е(цо»), 6!О Р?СС); /' плавное затенение */ В?иОиабгтсйогва1з(цоЬ), 6(0 5йООТН); 91йен!тзт(зтагс(тзт, 61 СОНР?СЕ); 91и5р»еге(поо), 0.75, 15, 19); 91Епб!тзт(): 91иОиабгтсрган5171е(цо»), 6(0 Р?СС); /' плоское затенение '/ В?иднабгтсйогва?з(йо»1, 610 РСАТ); 9!йенс!зт(з!агсстз!ъ?, 6( СОМР?се); 81ису1тпбег(цо»1, 0.5. 0.3, 1.0, 15, 5); 91Е»ос!5!(); 91оОиабгтсОган5су1е(роь?. 610 с?ме); /' каркас */ 91иОыабгтсМогва1з(поЬ?, 6(0 йОМЕ); 91йен(тз!(зтаг!Стзсе2, 6! СОНР?СЕ); 91оОтзх(йо»1.
0.25, 1.0, 20, 4); 91Е»б(ты(); 91иОиабг!срган5171е(цоь). 6СО 51(НООЕТТЕ); 91ибоабг!сйогва1з(цо»1, 6(0 МОНЕ); 9!Меч(тзт(з!агт!!з1+3, 6( СОНР?!Е); 91иРагтта10тзх(поЬ), 9,8, 1,0, 20, 4, 0.0. 225.8); 91Епб!.!зС(); уо!б о!яр!ау(хо!о) ( 91С1еаг(61 СОСОК ВОРРЕР 81Т ) 6С ОЕРТН ВОРРЕМ 81Т); В!Роз»натгтх(); 91Е»аЫе(6! С?6НТ?М6); В!5»абейобе?(6( 5НООти); 91тгапз1атег(-1 8, -1.9, 8.9); 91са11!!зс(зсаг!стас); 915»абеиобе1(6С РСАТ); В?Тгапз1атег(9.0, 2.0, 0.0); 91Риз»натгтх(); 91йоса!ет(390.0, 1.0, 0.9, 0.9); 91са11С! зт (з!аг1(! зт+1); 91Рорнатгтх(); 436 Глава 11 ° Мозаичное представление и поверхности второго порядка Поверхности второго порядка: сферы, цилиндры и диски 437 910! ааЬ?е(6С С?6НТ?Н6); 91Со1ог3((9.9, 1,0.
1.9): 91тгапа1а(ег(2.9, -2.0, 9.0); 9?са? «(аС(а(агСС(а!+2); 9?со?огзг(1.9, ?.О, О,в); 9?тгапа?эта!(0.0, 2.9, 0.0); 91Са11?(аС(а(агСС(а!+3); 91Рориа(г(х(); 91Р105Ь(); ) чо(б ге!ларе(!пС и, чпС П) ( 91ч'!пирог((9, О, (6С5(се!) и, (669!се!) П); 91Ма(г(хнобе(6С РЯО!ЕСТ?ОМ); 91Соаб?бепС!Су(); (г (и <= и) 910гтпо(-2.5, 2.5, -2,5*(6С(1оаС)п/(6?(1оаС)и. 2. 5' (6С(1оэС) П/ (6С(1оаС)и, - 19. О, 10. 0); е1ье 910гСПЬ(-2.5*(6С(1оаС)и/(6?(1оаС)П, 2,5'(6с(1оас)и/(6с(1оас)п, -2.5, 2.5, -19.0, 10.9)! 91Ма(г!кнабе(6С МООЕСЧ?ЕИ); 9?Соаб?бепС!Су()! чочб кеуьоагб(оп!!Епеб спаг кеу, чпс х, (пс у) ( 5и(ССЬ (Кеу) ( саае 22: ех!С(0); Ьгеах; (пС еа(п(чпС агвс, слаг" агвч) ( 91ЬС?п!С(йагвс, агвч); 91ЬС?п!СО!ар1ауМобе(ОСОТ 5?ИССЕ [ 6СОТ 969 [ 6СОТ ОЕРТН); 91ЬС?пчСИ(пбои5!се(599, 500); 91оС ?и! СИ! пбоиРоа! С! оп( 100 .
100): 9?оссгеасей(обои(агах[9)); !п(с(); 91ЬСОчар1ауропс(б!ьр1ау)! 91ЬСяеапарегопс(геьларе); 91ЬСКеуооагбгопс(хеуооагб). 91исМа(псоор(); гесогп О; Вычислители и й0кВ5 439 На самом низком уровне аппаратные средства рисуют точки, отрезки линий и многоугольники — обычно треугольники н четырехугольники. Гладкие кривые и поверхности рисуются аппроксимированными большим числом маленьких отрезков или многоугольников. Тем не менее многие полезные кривые и поверхности могут быть описаны математически небольшим числом параметров, таких как контрольные точки.
Сохранение 16 контрольных точек для поверхности требует значительно меньше памяти, чем сохранение 1000 треугольников вместе с информацией о векторах нормали для каждой вершины. Кроме того, 1000 треугольников лишь аппроксимируют истинную поверхность, а контролъные точки точно описывают. Вычислители обеспечивают способ указания точек кривой или поверхности (или ге части) с помощью только контрольных точек. Кривая или поверхность может быть воспроизведена с любой точностью. Дополнительно автоматически вычисляются векторы нормалей к поверхностям. Вы можете использовать данные, сгенерированные вычислителем, различными способами: нарисовать точки в месте нахождения поверхности, построить проволочный каркас поверхности или отобразить ее полную версию — с освещением, затенением и текстурами. Вычислители позволяют описать любые полиномиальные или рациональные йайопа1) полиномиальные сплайпы или поверхности любого порядка.
Это практически все сплайны и сплайновые поверхности, применяемые сегодня, в том числе В-сплайны, Ы(1ВВ5- (Хоп-()пЫогш Кайопа! В-Зр11пе — неоднородный рациональный В-сплайн) поверхности, кривые и поверхности Безье и сплайны Эрявта (Негппге). Поскольку вычислители предоставляют только низкоуровневое описание точек кривой или поверхности, они обычно используются ввышестояшими» библиотеками инструментов, обеспечивающими интерфейс программирования более высокого уровня. Средства Х() КВЗ библиотеки С1Л) — как раз такой интерфейс. Процедуры Х()КВ5 инкапсулируют в себе большой объем сложного хода. Конечное отображение обычно выполняется вычислителями, но в некоторых ситуациях, например при вырезании (Гг1шпппя) кривых, Х()КВЯ-процедуры используются для воспроизведения плоских многоугольников.
Зта глава содержит следующие основные разделы: ° Необходимые знания. Здесь говорится, какие знания вы уже должны иметь для чтения этой главы. Здесь также приводятся несколько ссылок на дополнительные источники информации. ° Вычислители. Рассказывает, как работают вычислители и как ими управлять с помощью команд ОрепС1..
° Интерфейс Х1)КВЯ библиотеки СШ. Описывает процедуры СШ для создания Х()КВЯ-кривых и поверхностей, их воспроизведения и возврата информации для вершин, полученных при мозаичном разбиении. 440 Глава 12 ° Вычислители и йый95 Необходимые знания Вычислители рассчитывают сплайны и поверхности, основанные на кривых Бе- зье (или на полиномах Бернштейна). В этой главе приводятся определяющие уравнения, но обсуждение не отклоняет- ся от основной линии и даже не включает в себя перечисление всех интересных свойств этих объектов. Если вы хотите использовать вычислители для рисования кривых и поверхностей с помощью других базисов, вы должны уметь выполнять их преобразование к базису Безье. Кроме этого, когда вы воспроизводите поверх- ность Безье или ее часть с помощью этих вычислителей, вам нужно определиться с детализацией разбиения.