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

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

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

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

Проверьте ориентацию. Используйте функцию к1оеоокд11) для нацеливания видимого объема на ваши объекты или рисуйте объекты около начала координат н используйте функцию к1тгапз1ате*() для переноса камеры в направлении осп г на расстояние, достаточное, чтобы все они попали в объем види- 128 Глава 3 ° Визуализация мости.

Если у вас получилось захватить все объекты, попытайтесь постепенно изменять видимый объем до тех пор (как описано далее), пока не достигнете нужного результата. 6. Для перспективных преобразований убедитесь, что ближняя плоскость отсечения расположена не слишком близко к наблюдателю (камере) или точность буфера глубины достаточна.

Даже п<>еле того как вы нацелили камеру в правильном направлении и увидели объекты, они могут оказаться слишком маленькими или чересчур большими, В случае а1орегзрЕСС>че() бь<васт нужно изменить угол, опредслясоший поле зрения, подгонкой значения первого аргумента втой функции. Можно прибегнуть к тригонометрии для вычисления нужного угла поля зрения, учтя размеры объекта и его расстояние от точки обзора: тангенс половины требуемого угла равен половине размера обьекта, деленной на расстояние до объекта (рис. 3.19). Для вычисления половинного угла от искомого в вашем распоряжении имеется библиотечная функция арктангенса. В листингс 3.3 приведен пример, где арктангенс вычислен с помощью функции асап2 () из длин прилегающей и противоположной сторон (катетов) прямоугольного треугольника. Результат необходимо преобразовать из ралианов в градусы.

Рнс. 3.19. Использование тригонометрии для вычисления поля зрения Листинг З.З. Вычисление поля зрения все<<ее Р1 3.1415826535 оооо)е са1со\аселп81е(пооосе з>се, воете О<зСапсе) ( Оооосе гаОСЛеСа. Оеа(не<а: гав<не(а = 2.0 ' а(ап2 (в<се!2.8, О<з<апсе); лез(не<а = (180.0 * гав(ле(а) I Р1; ге(огп Оез(нега: ) Управление стеком матриц 129 Конечно, ча|це размер объекта неизвестен, а известно только расстояние между ючкой наблюдения и некоторой точкой в сцене. Для получения более точного гяачення выясните, где проходят границы прямоугольного параллелепипеда, ог)иничиваюшего сцену, найдя максимальные и минимальные координаты х, у и г вовсем объектам сцены. Затем вычислите радиус сферы, описанной вокруг этого прямоугольного параллелепипеда, и используйте координаты центра сферы для яэлучения расстояния, а радиус — для определения размера.

Пусть все координаты объекта удовлетворяют следующим условиям: — 1 < х < 3, 5<у < 7 и -5 < г ~ 5. Координаты центра будут равны (1, 6, 0), а радиус описанной ~ферм равен расстоянию от центра до любого угла прямоугольного параллелепи- педа, например с координатами (3, 7, 5): (3-1)' 4(7+6)з э(5 — О)' =к/30 =5.477. Если координаты точки наблюдения — (8, 9, 10), расстояние от нее до центра равно (8 — 1)' +(9-6)' +(10-0)' = Л58 =12 570. Тангенс половинного угла равен 5 477, деленным на 12.570, что составляет 0.4357, то есть половинный угол равен 23.54'.

Помните, что угол поля зрения влияет на оптимальное расположение точки обзора если вы хотите получить реалистичное изображение. Например, если результатом вычисления явился угол в 179', точка наблюдения должна быть удалена на )Юлю дюйма от экрана для поддержания реализма. Если полученное значение угяз просмотра слишком большое, нужно переместить позицию наблюдателя дальше от объекта. Управление стеком матриц Матрицы модельно-видовых преобразований и преобразований проекции, кото- рые вы создаете, загружаете и перемножаете, это только вершина айсберга.

Каж- дтя иэ этих матриц — фактически самый верхний элемент стека (набора) матриц (рис. 3.20). Стек модельно- видовых матриц (2 матрицы размером 4 х 4) Стек матриц проекций (2 матрицы размером 4 х 4) Рис. 3.20, Стек модельно-видовых матриц и матриц проекций 130 Глава 3 ° Визуализация Стек матриц облегчает создание иерархических моделей, в которых сложные объекты составляются из простых. Допустим, вы рисуете автомобиль. У него есть четыре колеса, каждое из которых зафиксировано пятью болтами.

В вашем распоряжении подпрограмма, рисующая обобшенное колесо, и подпрограмма, рисующая болт, так как все колеса н болты выглядят одинаково. Этн подпрограммы рисуют колесо или болт в некоторых заданных положениях и с конкретной ориентацией — например, центрированные в начале координат с осями, совпадающими с осью г.

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

Запоминаем позицию и переходим к левому переднему колесу...» Точно так же для каждого колеса, если нужно нарисовать болт, запоминаем текушее положение и переходим к позиции каждого болта, отменяя преобразование после каждого рисования болта. Так как преобразования хранятся в матрицах, стек (набор) матриц представляет собой идеальный механизм для данных операций запоминания, перехода и отката. Все матричные операции, описанные далее (В1(оабнатг1к(), б1(оас)ТгапэроэеИатг1к(), к1Иц11Иатгтх(), к1Мц1(ТгапэроэеМаггтх(), к1(.оаб1бепттгу() и команды создания специфичных матриц преобразований), связаны с текущей матрицей или с верхней матрицей стека.

Управлять тем, какая матрица является верхней, можно с помощью команд управления стеком: к1РцэПИа(г1х (), которая помешает текущую матрицу на вершину стека, и к1РорИаг г1к (), которая отбрасывает верхнюю матрицу стека, как показано на рис. 3.21. (Как для любого стека, текущий элемент всегда находится на вершине стека.) По сути, команда к1РцэПМатг1к() означает «запомним текущее состояние», а команда к1РорИатг)х () — «вернемся к предыдущему состоянию». Копия матр До Рис. 3.21.

Работа со стеком матриц Управление стеком матриц 131 уоЫ к1Р05ЬМатгтх(уоЫ); Перемещает все матрицы в текусцем стеке матриц на один уровень вниз. Теку- щий стек матриц определяется с помощью команды В1Магсг(хмобе(). Верх- няя матрица копируется, то есть ее содержимое дублируется в верхней и вто- рой сверху матрице. Если матриц слишком много, генерируется ошибка. уоЫ В1Рорнатгтх(уоЫ); Удаляет верхнюсо матрицу из стека, уничтожая ее содержимое, Вторая сверху матрица становится верхней. Текущий стек определяется с помощью команды а1Матгтхиобе().

Ешти в стеке содержится единственная матрица, вызов функции а1рориатг(х() приводит к ошибке. Программа из листинга ЗА рисует автомобиль в последовательности кузон — ко- леса-болты. Листинг 3.4. Работа со стеком матриц бгаи ипее1 апб Ьо1(в() ( (пС (; бгаи иПЕЕ1(): (ОГ(1=0;т<5;тиа)( е(Ривлна(гсх(); 41аоСа(ет(22.9*1, 0.0, 0.0, 1.0); астгапвсасет().О, О.о, О.О); бган Ьо11(): а1РорнаСГ(х(); /' переходим к первому колесу "/ /' переходим ко второму колесу '/ Вэтом примере колеса и болты ориентированы вдоль оси д болты расположены через 72 и на расстоянии трех единиц (это могут быть дюймы) от центра колеса.

Передние колеса вынесены на 40 единиц вперед и на 30 единиц вправо и влево от вачача координат автомобиля. Стек более эффективен и удобен, чем одиночные матрицы, особенно когда ов поддерживается оборудованием. При помесцении матрицы в стек не нужно бгаи Ьобу апб ипее1 апб Ьо1Св() ( бгаи саг Ьобу(): а(РивПМатг1х(); астгапвса(ет(4О, Е, ЗО); бгаи илее1 апб ЬЬ1св(): 41РорМаСг(х(); 41РивПМатгсх(); 41тгапв1ате((40, О, -30), бгаи илее1 апб Ьо1(в(): 41РорнаСг!х(); /" так ме рисуем последиие два колеса '/ 132 Глава 3 ° Визуализация копировать текушие данные для возврата в основной процесс, а оборудование может одновременно копировать более одного элемента матрицы. Иногда разумно хранить иа вершине стека единичную матрицу, благодаря чему отпадает потребность постоянно вызывать функцию к11оаб1бепС11у (). К в н Р Стек модельно-видовых матриц П в о Стек матриц проекций По матрице проекций выполняется преобразование проецирования, описываюшее видимый объем.

Обычно ма~рицы проекций не объединяют, поэтому перел выполнением преобразований применяют функцию к1Соаб1бепс!суо. Также по этой причине глубина стека матриц проекций не превышает двух матриц. Некоторые реализации ОрепС! прелое~валяют возможность хранения в стеке более двух матриц размером 4 х 4. Для определения глубины стека используется функция я16ег1пгеяегч(61 ИАХ РЯОэЕСТ10И 5ТАСК ОЕРТН, С!1ПС "рагатт). Одним из применений второй матрицы в стеке являются приложения, в которых нужно отображать справочное окно с текстом дополнительно к обычному окну с трехмерной сценой. Так как легче всего отображать текст в ортогональной проекции, можно сохранить текущую проекцию, установить ортогональную проекцию, отобразить текст и вернуться к исходной точке: Х1Иатг)хиоае161 РаОЗЕСТ1ОН); а1Риэьиасг1х(); l' сохраняем текущую проекцию'/ Х1Соаа1Оепт1ту(); а)Огтьо<...): /' устанавливаем лля отображения справки *Г О(яр1ау Спе Ье1р(); Х1Рорнатг)х(); октсетьте, что мы также не меняем модельно-видовую матрицу.

ггг:.И'~гстФАУ«Е Если вы немного знаете математику, вы можете создать собственную матрицу проекций, которая позволит выполнить нестандартное преобразование. Так, ни в Орепбс, ни в 6СЦ не встроен механизм для создания угловой перспективы. Если вы собираетесь эмулировать рисование чертежей, такая матрица вам пригодится. К х1 О б1 Как вы уже видели ранее, в разделе «Модельно-видовые преобразования», молельно-видовая матрица содержит в себе данные от перемножения видовой и модельной матриц. Каждое видовое или модельное преобразование создает новую матрицу, которая перемножается с текущей модельно-видовой матрипей. Результат, который становится новой текушей матрицей, представляет собой композицию преобразований. Модельно-видовой стек содержит 32 матрицы размером 4 х 4. Изначально верхняя матрица — единичная. Некоторые реализации ОрепС!. позволяют хранить в стеке более 32 матриц.

Чтобы узнать, сколько матриц может уместиться в стеке, используйте команду я16е11псебегч(6С ИАХ ИООЕСЧ1ЕН 5ТАСК ОЕРТН, С1!пс 'рагатт). Дополнительные плоскости отсечения 133 Дополнительные плоскости отсечения Кроме шести плоскостей ограничения объема видимости (левой, правой, нижней, мрхней, ближней и дальней) можно задать дополнительные плоскости отсечеввя (как показано па рис. 3.22). Это позволяет давольно просто убирать постой)анне объекты из сцены — например, когда требуется отобразить разрез.

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

Тип файла
PDF-файл
Размер
56,35 Mb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

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