OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 100
Текст из файла (страница 100)
Аргумент ип!ие задает конкретное значение для свойства. Для свойства бс0 015РСАУ НОВЕ значение по умолчанию — 6с0 Е1(с, при этом поверхность воспроизводится многоугольниками. Если совместно с ним используется свойство 6с0 00ТС1МЕ РО(У6ОМ, создаются только контуры многоугольников. Атрибут 6) 0 00Тс1МЕ РАТСН предписывает применение контуров для лоскутов и кривых усечения. (См. раздел «Создание ХПВВ5- кривой или поверхности».) Свойство 6С0 МОРВ5 НОВЕ отвечает за то, будут ли вершины мозаики из многоугольников просто отображены (ра!ие равно 6С0 МОРВ5 РЕМОЕРЕР, это значение по умолчанию) или задействован интерфейс обратной связи (если ва!ие — 6С й0РВ5 ТЕ55ЕССАТОР).
За подробностями обращайтесь к разделу «Получение примитивов с выхода тесселятора Х() йВЗ». Интерфейс МОЙВ5 библиотеки 6С0 457 Константа 6С0 СОСС1М6 может ускорить процесс, так как в этом случае тесселяция не выполняется для Х()КВБ-объектов, целиком расположенными вне видимого объема; установите это свойство в 6С ТРОЕ для включения режима отбраковки (сп111пя) (значение по умолчанию — 61 РАС5Е). Поскольку Ы1)КВ5-объект воспроизводится как примитив с различными значениями параметров (и и о), он «разламывается» на небольшие отрезки прямых или многоугольники.
Если значение аргумента рюрепу равно 6С0 5АИРС1М6 ИЕТНОО, значение оа1ие устанавливается в 610 РАТН СЕМОТН (по умолчанию), 6С0 РАРАМЕТР1С ЕРРОЙ, 6С0 ООИАХМ 015ТАМСЕ, 610 ОВОЕСТ РАТН СЕМОТН или 600 ОВОЕСТ РАРАИЕТР1С ЕРЙОЙ. Эти константы задают характер мозаичного разбиения Й()КВЗ-кривой или поверхности. Когда па1ие равно 6С0 РАТН СЕМОТН, поверхность строится так, чтобы максимальная длина ребра, в пикселах, выходных многоугольников не превышала заданную значением 6С0 5АИРС1М6 ТОСЕЙАМСЕ. Если па!не равно 610 РАЙАИЕТР1С ЕЙЙОР,значением 610 РАРАИЕТЙ1С ТОСЕЙАМСЕ является максимальное расстояние в пикселах между выходными многоугольниками н аппроксимируемой ими поверхностью.
Значение 610 ОВОЕСТ РАТН СЕМОТН для аргумента оа1ие схоже с 6С0 РАТН СЕМ6ТН, с тои разницей, что максимальная длина (величина 610 5АИРС1М6 ТОСЕРАМСЕ) примитивов тесселяции измеряется относительно пространства координат объекта, но не в пикселах. Аналогичным образом соотносятся 6 С 0 ОВОЕСТ РАРАИЕТЙ1С ЕРРОР и 6С0 РАЙАИЕТЙ1С ЕРЙОЙ, здесь 6С0 ОВ1ЕСТ РАРАИЕТР1С ТОСЕРАМСЕ определяет предельное расстояние между примитивами тесселяции и поверхностью Ы(1КВЯ-объекта в системе координат последнего. Если значение оа1ие задано как 600 ООМА1й 015ТАМСЕ, приложение задает, в параметрических координатах, количество точек на единицу длины в и- и оизмерениях — 6С0 0 5ТЕР и 610 Н 5ТЕР соответственно. Если задано свойство (рюрегсу) 6С0 5АИРС1й6 ТОСЕЙАМСЕ и метод выборки (затр11пй) 6С0 РАТН СЕМОТН или 610 ОВЗЕСТ РАТН СЕМОТН, значение па!ие соответствует максимальной длине, в пикселах или в единицах измерения объекта (согласно свойству), используемой для выходных многоугольников. Например, значение по умолчанию 50.0 ограничивает длину отрезка или ребра многоугольника 50 пикселами или 50.0 единицами измерения в собственной системе отсчета объекта.
Если значение ргорегту равно 6С0 РАРАИЕТР1С ТОСЕЙАМСЕ и метод выборки — 6С0 РАРАИЕТР1С ЕЙЙОР или 610 ОВзЕСТ РАРАИЕТР1С ЕРРОР, величина оа1ие управляет максимальным расстоянием, в пикселах или в системе координат объекта соответственно, между мозаичными многоугольниками и аппроксимируемой ими поверхностью. Вне зависимости от метода выборки, значение по умолчанию для 6С0 РАРАИЕТР1С ТОСЕЙАМСЕ равно 0.5. Для 6С0 РАРАИЕТЙ1С ЕРРОЙ это значение создает мозаичные многоугольники в пределах половины пиксела аппроксимируемой поверхности. (Для 6С0 ОВ! ЕСТ РАРАИЕТЙ1С ЕРЙОР действие значения по умолчанию 0.5 не настолько очевидно.) Если метод выборки задан как 6С0 ООИА1М 015ТАМСЕ и для рюреггу указано одно из двух значений: 6С0 0 5ТЕР или 6С0 Ч 5ТЕР, оа1ие является количеством выбираемых точек на единицу длины в и- или о-измерениях соответственно, в параметрических координатах.
Значение по умолчанию для параметров 6С0 0 5ТЕРи 6С0 Ч 5ТЕР равно 100. 488 Глава 12 ° Вычислители и йОКВ5 Свойство 6ЕО АОТО СВАО ИАТК1Х определяет, загружак>тся ли матрицы проекции, модельно-видовая и окна просмотра с сервера ОрепС1 (по умолчани>о 66 ТКОЕ), или приложение должно само задать их с помощью к1цьоаб5аар1!пбнатг!сез() (66 РАС5Е). ПРИМЕЧАНИЕ Несколько свойств йОКВ5 (6Ш НОКВ5 МООЕ и его значение 6сО йОКВ5 ТЕ55Еь(АТОК (не по уиолчанию), 6Ш ОВ)ЕСТ РАТН (ЕЙОТН и 6Ш ОНЕСТ РАКАМЕТК(С ЕККОК) были представлены в вер. сии 6Ш 1.3.
До 6Ш 1.3 способ их реализации зависел от конкретного расширения, если они поддерживались. Посмотрите на номер версии 6Ш перед тем, как папытаегесь иаюльзоввть эти свойства. чоЫ б)ОСааа5авр1!пбйатг!сез(СЬПппгЬ50Ь) *поЦ, сопз( С11)оас тес(е1Мат>зх[16[, сонат СЬ([оаг рго)Ма(г(х[16), совет СЬ(пг а>еырог([>1[); При включенном параметре 6ЕО АВТО (ОАО ИАТК1Х молельно-видовая матрица и матрица проекции, а также окно просмотра указываются в1цЕоаб5авр1!пейатг!сев() И ИСПОльэуются для вычислениЯ матриц выбора и отбраковки, применяемых к каждой кривой или поверхности ЫУВВЗ. Если вам нужно запросить текущее значение свойства ЫТ)ВВЯ, используйте к1о6етйцгвзРгорегту().
1 оЫ 51ц6есйц г Ь з Р горе гту (С1Л)пцгЬзОЬ) "поЦ, СЕепшп р>ореп77, С) 1)оат "Ыие); Запрашивает значение свойства рп>реггу ЫТ)ВВЗ-обьекта по!у, возвращая ега по ссылке на аа1ие. Обработка ошибок й0йВ5 Поскольку при выполнении функций )Ч()ВВВ вероятно возникновение 37 различных ошибок, неплохо зарегистрировать функцию обратной связи на случай их проявления при выполнении кода. В программе из листинга 12.5 это делается вызовом к1ийцгьзса11Ьасх(спеиогЬ, 6Ш ЕККОК, (6(чо!а (")()) погЬзЕггог); чоЫ к1ийигЬ5Са11Ьаск(СП)ппгЬ5С)Ъ) *поб7', С1епшп то)нс)>, чо>б (*~п)(СЬепшп еггигСог2е)) Аргумент шй>с)> — это тип обратной связи; для включения обработки ошибок он должен быть равен 6СО ЕККОК.
Когда функция ХТ)ВВЗ обнаруживает ошибку, вызывается функция )л, которой передается код ошибки в качестве единственного аргумента. Значение для епп>гСос(е — зто одна из 37 ошибок, именованных от 6СО йОКВ5 ЕККОК1 до 6СО йОКВ5 ЕККОК37. Используйте 51ОЕггог51г!пк() для получения содержательного описания кода ошибки. В листинге 12.5 для обработки всех возмо>кных ошибок зарегистрирована процедура пцгЬ5Еггог(): чо!а СА((ВАСК пагозеггог(6(епцш еггогСоае) ( Сале! 6СОЬУ1Е *ЕЗ1Г!ПВ; езсг!пв = З1цбггог5(г!пб(еггогсоае); трг!псг(зсаегг, "Ошибка нокВ5: ъз>п", езсг!пв); ех!1(0). ) Интерфейс ХОКВ5 библиотеки 6Е0 459 В версию СШ 1.3 включены дополнительные функции обратной связи Х() КВЯ, возвращающие программе значения, полученные при мозаичном разбиении (вместо воспроизведения этих значений).
За подробной информацией о новых вызовах обращайтесь к разделу «Получение примитивов с выхода тесселятора ХБКВЗ». СОЗДаНИЕ МОКВс'-КРИВОЙ ИЛИ ПОВЕРХНОСТИ При построении ХПКВБ-поверхности функция В(оногвэ5огтасе О вызывается иежду командами-скобками В1овеВ1п5огтасео и а1иЕпа5ог(асео, Обрамляющие подпрограммы сохраняют и восстанавливают состояние вычислителя. чоЫ В1оВея1п5огтасе(С1Л1пцгЬзОЬ) "логу); чоЫ а1оЕпа5ог(асе(СЬПпцгЬзОЬ) *по)3) После вызова В1ЧВех1п5ог(асеп делается один или более вызовов х1оиигЬэ5огтасе(), описывающих атрибуты поверхности. Среди них должны присутствовать команда с указанием типа поверхности (6( МАР2 ЧЕКТЕХ 3) и команда для генерации вершин (6( мАР2 чеРтех 4). команда В1оеп05огтасеО завершает описание поверхности.
Усечение ХПКВЯ-поверхностей также производится в пределах между В1ивех1п5игтасе О и х1оЕпа5иг Гасе О. (См. раздел «Усечение ХПКВВ-поверхностей».) чо!г( я1омогвэ5огтасе(СП5ппгЬзОЬ)' *лоб~, С)лп(шгпо( соил(, СЬ()оаг «иупо(, СЬ(пг оИпог соипг, 01йоа1 "Ылог, С1(пг и зггЫе, С?лпг о зггЫе, СЬйоас 'ст(аггау, С?зпт иоп2ег, Ссшт еоа(ег, Ссепцш йгре); Описывает вершины (или нормали к поверхности или координаты текстуры) ХПКВЯ-поверхности поЬ)'. Некоторые значения должны быть заданы для обоих параметрических направлений: и и ш такие как последовательности узлов (и)гпог и глгпог), количество узлов (и)гпог соил( и гепо( соил() и порядок много- члена (попашет и попашет).
Заметьте, что количество контрольных точек в целом не указывается. Оно выводится для каждого параметра как число узлов минус порядок, Соответственно, для полной поверхности число контрольных точек равно произведению числа контрольных точек в каждом параметрическом направлении друг на друга. Аргумент сг)аггау указывает на этот массив контрольных точек. Последний аргумент, гуре, — это один из типов двухмерных вычислителей.
В общем случае вы можете использовать 6( МАР2 ЧЕРТЕХ 3 для рациональных и 6Е МАР2 ЧЕКТЕХ 4 для нерациональных контрольных точек. В вашем распоряжении и другие типы, такие как 6( МАР2 ТЕХТОРЕ СООКО ' или 6( МАР2 МОКМАЕ, для вычисления и назначения координат текстур или нормалей к поверхности. Например, чтобы создать освещенную (то есть с нормалями) и текстурированную ХПКВЯ-поверхность, вам нужно сделать следующую последовательность вызовош В1оВеВ)п5огтасе(поЬ)); 51иногоэ5огтасе(поЬ),..., 6( МАР2 ТЕХТОКЕ СООКО 2); а1оиогвэ5огтасе(поЬ),..., 6( МАР2 КОРМА(); 51одигвэ5огтасе(поЬ),..., 6Е МАР2 ЧЕКТЕХ 3); а1оЕпа5огтасе(поЬ)); 4бо Глава 12 ° Вычислители и М0КВ5 Аргументы и з(нг(е и о з(иве представляют количество значений с плавающей точкой между контрольными точками в каждом из параметрических направлений.
В отношении этих параметров эффективен тип вычислителя, а также его порядок. В программе из листинга 12.5 значение и згпс(е равно 12 (4 х 3), поскольку имеется три координаты для каждой вершины (заданные 61 ИАР2 НЕКТЕХ 3) и четыре контрольные точки для параметра о; о з(пИе равно 3, так как каждая вершина описывается тремя координатами, а контрольные точки для параметра о в памяти являются смежными. Рисование Х()(СВЯ-кривой аналогично рисованию поверхности, с той разницей, что все вычисления относятся к одному параметру — и, а не к двум. Как и для поверхностей, используются подпрограммы-скобки к1оВеВ1 псе гче О и я1оЕппсогче О.
чоЫ В1оВеВ1 пСогче(С1 ПппгЬзОЬ) поЬЯ; чоЫ В1оЕпосогче(СЕУппгЬзОЬ) "поЬ>) После вызова В1оВеВ( пСогче() делается один или более вызовов 61опогЬзСо гче О, определяющих атрибуты поверхности. Они должны включать в себя указание типа поверхности (61 ИАР1 НЕЙТЕХ 3) или генерацию вершин (61 МАР1 НЕКТЕХ 4). Описание завершается командой к1НЕЬОСогчеО.
чоЫ к1оиогвзсогче(СЕБппгЬзОЬ) 'ногу', С(зпс п)гпо( соип~, Сапа( *и(гной С(апг и з(пг(е, СЕНоаг *сГ(аггау, С(зп( иогг(ег, С епитп (уре) Определяет Х()ВВЯ-кривую для объекта поЦ. Аргументы задаются аналогично В1опогЬз5ог(асе(). Заметьте, что здесь процедура требует указания только одной последовательности узлов и объявления одного Х()КВ3-объекта, Если кривая определена в пределах пары я1овеВ(пСогче()/В1иЕппсогче(), тип вычислителя может быть одним из допустимых для одномерных вычислителей (таким как 6( МАР1 ЧЕКТЕХ 3 или 6С МАР1 ЧЕЙТЕХ 4). Получение примитивов с выхода тесселятора (((3)сВБ По умолчанию тесселятор Х()КВВ разбивает Х()ВВ3-объект на линии и многоугольники, а затем их отображает.
В версии С1() 1.3 появились новыс функции обратной связи, которые позволяют вместо отображения вернуть рассчитанные значения в программу. Чтобы воспользоваться этой возможностью, вызовите е1опогвзРгорегту О, установив значение 6С0 МОЙВ5 ИОВЕ для свойства ргорег(у и для оа(ие — 610 МОКВ5 ТЕ55ЕССАТОЙ. Второй шаг: несколько вызовов я1оиогвзса11ЬасКО для регистрации функций обратной связи. чоЫ В1опигвзса11Ьаса(С1Л1ппгЬзОЬ) 'по(п', С1.еппгп шп|сй, чоЫ ('Уп)О); Аргумент поЬ~' — зто мозаично разбиваемый Х()ВВБ-объект.