КГ_5глава (Компьютерная графика), страница 5
Описание файла
Файл "КГ_5глава" внутри архива находится в папке "Компьютерная графика". Документ из архива "Компьютерная графика", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 4 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "компьютерная графика" в общих файлах.
Онлайн просмотр документа "КГ_5глава"
Текст 5 страницы из документа "КГ_5глава"
Находим коэффициент отражения ki = cos <pi sin pe
если ki < 0, то ki = О
Находим коэффициент отражения кг = cos фг sin pc
если кг < 0, то кг = О
Находим цвета clrl и clr2, соответствующие ki и кг
Рисование двух симметричных вертикалей задней стороны:
вертикаль от (хс+х, ус-у - h/2) до (хс+х, ус-у + h/2) цветом clr2 вертикаль от (хс-х, ус-у - h/2) до (хс-х, ус-у + h/2) цветом clrl
Рисование двух симметричных вертикалей передней стороны:
вертикаль от (хс+х, ус+у - h/2) до (хс+х, ус+у + Ь/2) цветом clrl вертикаль от (хс-х, ус+у - h/2) до (хс-х, ус+у + h/2) цветом clr2 }
Здесь для упрощения записи алгоритма использована идеальная диффузная модель отражения света. Вначале определяются коэффициенты ki и к2, которые затем можно использовать для вычисления цвета, например, в виде компонент R, G, В:
где Ru, Gu и Вu — компоненты описания цвета поверхности цилиндра.
Вертикали выводятся сначала для задней стороны боковой поверхности, а затем для передней. При использовании Z-буфера порядок вывода безразличен.
Данный алгоритм сложнее предыдущего. Здесь в теле цикла выполняется значительное количество медленных операций— кроме корня квадратного вычисляется также и арксинус. Это является недостатком алгоритма с позиций быстродействия. Положительной чертой алгоритма является вычисление угловой координаты (φ), которую можно использовать для наложения текстуры-развертки (карты,).
Наложение текстуры
В некоторой степени, компьютерная графика — это создание иллюзий. Текстуры наглядно это демонстрируют (рис. 5.38). Разве бывают кирпичи округлой формы? Крайний справа цилиндр "выложен" именно такими кирпичами. При наложении текстуры плоская карта-развертка растрового образца текстуры плавно искривляется, следуя гладкой форме боковой поверхности.
Рис. 5.38. Наложение текстур на боковую поверхность цилиндра
Попробуйте подобрать текстуру, чтобы кирпичи выглядели действительно плоскими, как в реальной жизни. Однако тогда может оказаться заметным искривление в другом ракурсе. Текстура— это достаточно простой способ
изображения сложных поверхностей, это начальный уровень имитации мате риалов. В самом деле, если строить модель каждого отдельного кирпича вид углублений шероховатой поверхности, то эта модель будет намного сложней цилиндра. Таким образом, для создания более или менее правдоподобного изображения, которое в отдельных случаях удается выдавать в качестве реалистичного, необходимо, в первую очередь, подобрать соответствующую! текстуру.
Кроме того, и для текстурированных объектов очень важно соблюдать законы отражения. Если убрать градиентную закраску у четырех цилиндров, изображенных на рис. 5.38, то для первых трех (кроме "кирпичного") почти полностью исчезнет иллюзия объемности.
Поскольку текстура чаще всего представляет собой оцифрованный фотоснимок реальных объектов, сделанный с определенного ракурса съемки, то текстурирование дает удовлетворительный результат только для соответствующих ракурсов показа.
Рассмотрим, как наложить текстуру на боковую поверхность цилиндра. Способ наложения определяется типом алгоритма рисования. Если цилиндр рисуется как многогранник, то в этом случае текстурирование выполняется так, как нами уже было рассмотрено выше для многогранников, аппроксимирующих шар. Алгоритмы рисования объектов в виде многогранников и полигональных сетей являются достаточно универсальными и могут быть использованы для широкого класса объектов.
Здесь мы рассмотрим один способ наложения текстуры, специально предназначенный для цилиндра. В его основе лежит способ рисования цилиндра вертикалями, рассмотренный выше. На рис. 5.39 показана одна из вертикалей закрашивания поверхности.
Рис. 5.39. Наложение текстуры вертикалями
Общий цикл рисования боковой поверхности можно представить себе следующим образом. Вначале определяются координаты текущей вертикали закрашивания в экранной системе координат. Пусть эти координаты составляют (х, у1) - (х, у2). Необходимо также вычислить угловую координату этой вертикали {<р). По значению угла ср определяем координату Х Т в шаблоне текстуры
где НоrТех — горизонтальный размер шаблона текстуры. Угол φ измеряется в градусах.
Одна вертикаль закрашивания (х, у1) — (х, у2) соответствует вертикали с координатами {Х Т, 0) - {Х Т, VertTex - 1) в шаблоне текстуры, где VertTex — размер текстуры по вертикали.
Рисование одной вертикали боковой поверхности можно представить как цикл, в ходе которого последовательно рисуются пикселы с координатами от у1 до у2. Для пиксела в точке (x, у) определяются соответствующие координаты {Х Т, YT) в шаблоне текстуры, причем Х Т нам уже известна, а координата YT вычисляется по формуле:
Затем в шаблоне текстуры определяется цвет точки {Х Т, YT). После этого вы бранным цветом рисуется пиксел с координатами(x, у) в основном растре. Формулы вычисления координат можно преобразовать к следующему виду:
где А, В, С и D — константы для всех пикселов одной вертикали. Таким об разом, для каждого пиксела вертикали приходится выполнять несколько one раций умножения и сложения. Для ускорения текстурирования можно построить Инкрементный алгоритм.
Данный способ наложения текстуры можно использовать только для простейших цилиндров, расположенных вертикально. При наложении текстур на более сложные поверхности (в том числе вариации формы цилиндра) следует применять полигональные методы.
Вариации формы цилиндра
Параметрические формулы цилиндра удобно использовать в качестве основы для описания поверхностей достаточно сложной формы. В исходных napf метрических уравнениях цилиндра
величины Н и R — это константы. Рассмотрим примеры поверхностей, когда! радиус R является функцией параметров h и l, то есть R - R(h,l).
Если радиус зависит только от высоты, то есть R = R{h), то это соответствуя поверхности вращения относительно оси z. Задание конкретной функции R{h) для описания какой-либо поверхности напоминает вытачивание цилиндрической заготовки на токарном станке. На рис. 5.40 приведены примеры поверхностей вращения (во всех случаях параметр h изменяется от -0.5 до +0.5).
где R1 и R2 — радиусы нижней и верхней части соответственно. При R2 =0 получаем конус. Очевидно, что при аппроксимации многогранниками конус следует рисовать уже не четырехугольными, а треугольными гранями.
Рис. 5.40. Примеры поверхностей Рис. 5.41. Еще пример поверхности
вращения вращения
Для поверхности, изображенной на рис. 5.41, при вычислении координат вершин четырехугольных граней необходимо использовать уже два цикла — по l и по h.
M
Например:
В данном случае вдоль вертикали располагаются по две грани (dh = 0.5).
В следующих примерах для создания иллюзии гладкой поверхности нужно использовать большее число граней (рис. 5.42, 5.43).
Рис. 5.42. Сетка граней и закрашивание методом Гуро
Рис. 5.43. Еще две поверхности вращения
Следующую группу составляют такие вариации формы цилиндра, когда радиус зависит только от долготы, то есть R = R(l). Пример подобной поверхности показан на рис. 5.44.
И, наконец, последнюю разновидность вариаций данного типа, согласно нашей классификации, представляют поверхности R = R(h, l). Пример такой поверхности приведен на рис. 5.45.
Рис. 5.44. Другая разновидность вариаций формы цилиндра
Рис. 5.45. Винтовая поверхность R = R(h, I)
5.3. Тор
Функции параметрического описания поверхности тора запишем в следующем виде
где R u r — большой и малый радиусы, φ и ω — широта и долгота. Для замкнутой поверхности углы φ и ω должны изменяться в полном круговом диапазоне, например, от 0 до 360° или от -180° до +180°.
На рис. 5.46, 5.47 показаны различные способы изображения тора.
Рис. 5.46. Простейшее изображение тора: а — каркас; б — поверхность с удаленными невидимыми точками
Рис. 5.47. Многогранники, диффузная модель отражения: а — обычное закрашивание; б — интерполяция по методу Гуро '
Рисование тора средствами компьютерной графики достаточно просто может быть выполнено на основе аппроксимации многогранником, подобно тому, что мы уже рассматривали для шара и цилиндра. Повторим запись алгоритма вывода многогранника четырехугольными гранями, видоизменив его для данного конкретного случая
Очевидно, что чем меньше величины dω и dφ, тем больше число граней у вписанного многогранника и тем лучше такой многогранник соответствует гладкой поверхности тора. При использовании такого полигонального метода получения изображения достаточно просто наложить текстуру. Полигональный способ наложения текстур для тора
полностью аналогичен способу, рассмотрен- _ _ .„ _
„ J v * Рис. 5.48. Тор с текстурой
ному выше для шара. Пример подобного
текстурирования приведен на рис. 5.48.
Рассматривая в предыдущих разделах шар и цилиндр, мы наряду с полигональными способами пытались анализировать и другие способы изображения. Например, рисование цилиндра вертикальными линиями. Для тора изо; брести эффективный специальный алгоритм графического вывода, вероятно достаточно сложно. Во всяком случае, автору он неизвестен. Хотя во второй части этой книги есть пример программирования одного "неполигонального1! способа рисования тора. Можно представить тор как след движения шара, Если шар перемещается с достаточно малым шагом, то след получается весьма похожим на тор. Впрочем, данный пример рисования приведен в книге не как рекомендуемый способ изображения тора, а как пример изображения движущихся шариков. По быстродействию данный способ изображении тора весьма плох из-за того, что приходится многократно рисовать одни и те же точки (подобные аспекты мы рассматривали в главе 3 при обсуждении алгоритмов рисования толстых линий).
Вариации формы тора
На рис. 5.49 изображена поверхность многогранника, для которой параметрические формулы такие же, как и для тора. Единственное отличие здесь в том, что широта φ изменяется в диапазоне от -135° до +225° с шагом dφ =90°.