КГ_5глава (Компьютерная графика), страница 2

2017-07-12СтудИзба

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

Файл "КГ_5глава" внутри архива находится в папке "Компьютерная графика". Документ из архива "Компьютерная графика", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 4 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "компьютерная графика" в общих файлах.

Онлайн просмотр документа "КГ_5глава"

Текст 2 страницы из документа "КГ_5глава"

В приведенных выше примерах использовался точечный источник освеще­ния, расположенный так же, как и камера— на оси Z видовых координат, Как получить изображение шара, освещенного сбоку?

Рассмотрим для простоты диффузное рассеивание. Для расчета косинуса уг­ла наклона нормали по отношению к направлению луча источника света! удобно ввести еще одну систему координат. Эта система координат — обо­значим ее как (Хс, Yc, Zc) — повернута в пространстве таким образом, чтобы источник света располагался на оси Zc. Здесь следует уточнить, что мы рас­сматриваем точечный источник света, расположенный снаружи шара на дос­таточно большом расстоянии, причем не учитываем зависимость освещенно­сти точек поверхности от расстояния до источника света.

Ориентацию системы координат источника света (Хс, Yc, Zc) можно задать двумя углами поворота (at, Д) — подобно тому, как задается видовая систе­ма координат. На рис. 5.7 показано расположение осей.

Ориентация осей координат

| Рис. 5.7. Пример взаимного расположения осей мировых координат (х, у, z), видовых

I координат (X, У, Z) — (а = -18°, уЗ= 71°) и системы координат, связанной с источником

освещения (Хс, Ус, Zc) — (<%= 51°, &= 48°)

Косинус угла нормали можно вычислить по формуле

где Zc — координата точки поверхности в системе координат источника све­та. Необходимо учесть, что нулевые и отрицательные значения косинуса со­ответствуют неосвещенным точкам поверхности.

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

Градиентное закрашивание круга

В предыдущем разделе мы пытались изобразить гладкую поверхность шара путем рисования многогранника с достаточно сложным закрашиванием по­лигонов отдельных граней. А нельзя ли рисовать шар как-нибудь попроще?

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

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

Вашему вниманию предлагается следующий алгоритм закрашивания.

В этом алгоритме использована симметрия шара, освещенного указанным образом. Поэтому вычисления производятся только для точек одного октанта круга. Для определения цвета пикселов вычисляется значение (к), которое равно квадрату косинуса угла нормали по отношению к оси 2 видовых коор­динат.

Во второй части этой книги мы рассмотрим примеры программ, в которых использован данный алгоритм градиентного закрашивания.

Проанализируем алгоритм и попробуем оптимизировать его по быстродейст­вию. В первую очередь отметим, что в данном алгоритме вычисляется квад­рат косинуса нормали именно из соображений повышения быстродействия— для вычисления косинуса в первой степени необходимо вычислять квадратный корень из (к). Далее заметим, что во внутреннем цикле присутст­вуют операции деления и умножения. Как от них избавиться? Вначале рас­смотрим вычисление величины r2 = х22. Поскольку во внутреннем цикле изменяется у, то рассмотрим r2 как функцию от у. Обозначим ее как r2(у), и найдем разность значений этой функции для соседних шагов цикла:

Поскольку r2(у+1) = r2(у) + '(у+1), то можно организовать вычисление г2 в цикле по у следующим образом:

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

То, что вторая разность является константой, не зависящей от у, можно ис­пользовать для построения цикла, в теле которого присутствуют только опе­рации сложения. Перестроим цикл следующим образом.

Можно применить этот разностный метод (известный в математической ли­тературе для организации итерационных вычислений) также и для вычисле­ния величины к = 1 - r2/R2. Вы можете это сделать в качестве упражнения.

Необходимо отметить, что подобная оптимизация может не дать существен­ного ускорения графического вывода, если время вычисления величин r2 и к мало по сравнению с другими операциями. Так, например, в первую очередь необходимо обеспечивать быструю запись в память пикселов растра отобра­жения. Хорошие возможности для ускорения тут дает симметрия круга по октантам.

Кроме иллюстрации возможностей ускорения, модифицированный алгоритм здесь приведен еще с одной целью. Оказывается, если заменить операцию (dr2 = dr2 + 2) на (dr2 = dr2 + D), где D является константой для всего цикла рисования, то можно получить довольно любопытные вариации формы кру­га. На рис. 5.8 приведена форма фигур, соответствующих некоторым значе­ниям D.

Рис. 5.8. Фигуры, получаемые при различных значениях D

Значение константы D может быть и дробным — форма фигуры плавно из­меняется в зависимости от D.

Наложение текстуры на шар

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

Давайте построим изображение поверхности шара, на который как резиновая оболочка "натянута" текстура — карта мира.

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

i Рис. 5.9. Соотношение угловых координат поверхности шара

I и пикселных координат растрового прямоугольника текстуры

На рис. 5.10 приведен один из возможных вариантов карты мира в цилиндри­ческой равнопромежуточной проекции.

Рис. 5.10. Пример текстуры — карта мира

Как использовать текстуру для построения требуемого изображения шара? Это можно сделать несколькими способами. Разнообразие вариантов обу­славливается, в том числе, и способом описания поверхности шара.

Рассмотрим вначале вариант, основывающийся на аналитической форме описания шара. Будем использовать формулу, связывающую координаты каждой точки поверхности шара в виде

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

Рассмотрим данный алгоритм подробнее. Для простоты будем использовать аксонометрическую проекцию, которая строится как поворот исходной (ми­ровой) системы координат (х, у, z) на углы а и β соответствующие положе­нию камеры наблюдения. Поскольку в обеих системах координат— как в исходной (х, у, z), так и в повернутой системе (X, Y, Z) — для шара сохраня­ется равенство суммы квадратов координат квадрату его радиуса, то можно найти Z по известным двум координатам Х и Yследующим образом:

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

Далее, координаты точки (х, у, z) можно вычислить, выполнив обратный по­ворот координат (X, Y, Z). Например, если считать, что плоскость проециро­вания повернута вокруг оси х на угол β то

Поворот камеры вокруг оси z (по долготе на угол а) мы учтем позже.

Преобразование координат (х, у, z) в широту и долготу (B, L) можно выпол­нить по формулам:

Теперь можно учесть поворот камеры по долготе:

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

По известным значениям широты (В) и долготы (L) определяем координаты точки в растре текстуры. Как уже указывалось выше, для текстуры в виде вертикальной равнопромежуточной цилиндрической проекции шара пере­счет координат выполняется простейшим образом:

где а, Ь, с и d — константы, определяемые размерами растра текстуры. На рис. 5.11 показаны несколько текстурированных изображений поверх­ности шара.

Рис. 5.11. Примеры использования текстуры для шара

Данный способ построения текстурированного изображения имеет свои дос­тоинства и недостатки. Положительной чертой способа можно считать высо­кую точность отображения — точность определяется разрешением растров текстуры и основного растра. Погрешность вычисления координат по фор­мулам преобразований здесь незначительна при использовании стандартной разрядности чисел с плавающей точкой.

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