КГ_5глава (Компьютерная графика)
Описание файла
Файл "КГ_5глава" внутри архива находится в папке "Компьютерная графика". Документ из архива "Компьютерная графика", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 4 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "компьютерная графика" в общих файлах.
Онлайн просмотр документа "КГ_5глава"
Текст из документа "КГ_5глава"
ГЛАВА 5
Примеры изображения трехмерных объектов
5.1. Шар
Рассмотрим несколько способов построения изображения шара.
Каркасное изображение
Для каркасного изображения шара можно рисовать сетку меридианов и параллелей. Для этого удобно воспользоваться известными формулами параметрического описания. Координаты точек поверхности шара определяются как функции от двух переменных (параметров) — широты и долготы (рис. 5.1):
где R — радиус шара, В — широта (изме- рис. 5.1. Широта и долгота няется от -90° до +90°), L — долгота (от -180° до +180° или от 0° до 360°).
Меридиан — это линия, представляющая точки с постоянной долготой. Каркас из меридианов можно нарисовать следующим образом:
Здесь введены две величины — dL и dB. Значение dL определяет шаг меридианов по долготе, значение dB — это шаг по широте, который должен был] малым (единицы градусов) для изображения меридиана достаточно гладкой кривой. Преобразование координат производится по формулам, соответствующим выбранной проекции. Для аксонометрической проекции — это поворот мировых координат на углы а и Д с последующим преобразованием! видовых координат в экранные координаты (как было рассмотрено в главе 2).| Параллель — это линия, состоящая из точек с постоянной широтой. Для рисования каркаса из параллелей можно использовать такой цикл:
На рис. 5.2 изображены примеры каркасного изображения на основе меридианов и параллелей.
Рис. 5.2. Меридианы и параллели
I
Удаление невидимых точек
Для изображения поверхности шара с удалением невидимых точек в аксонометрической проекции можно воспользоваться таким свойством: видимыми являются точки с неотрицательным значением координаты Z в системе видовых координат. При этом центр видовых координат (X, Y, Z) совпадает с центром шара, плоскость X0Y является плоскостью проецирования, а ось Z направлена на камеру (наблюдателя). На рис. 5.3 приведен простейший вариант показа поверхности шара с удалением невидимых точек меридианов и параллелей.
Приведенные выше изображения были построены на основе линий и являются схематичными, весьма далекими от реалистичного изображения поверхности шара. Значительно лучше \1ожно нарисовать шар с по мощью фигур с заполнением — закрашиванием по- Рис- 5.3. Удалены верхности разными цветами. невидимые точки
Многогранник с закрашиванием граней
Теперь нарисуем шар в виде многогранника, аппроксимирующего форму поверхности с заданной точностью. Известно большое число типов многогранников. Сведения о них имеются в многочисленных книгах по геометрии.
Мы будем рассматривать достаточно узкий класс многогранников. Отличительным признаком рассматриваемых многогранников является то, что у них ребра ориентированы вдоль меридианов и параллелей. Такие многогранники будем описывать двумя параметрами — шаг по широте {dB) и шаг по долготе (dL) в градусах. Кроме того, будем считать эти многогранники вписанными изнутри в шар, то есть вершины каждой грани лежат на поверхности шара. Очевидно, что с увеличением количества граней такие многогранники все больше приближаются к шару. Иными словами, чем меньше dB и dL, тем лучше поверхность многогранника аппроксимирует форму поверхности шара.
В табл. 5.1 приведены примеры таких многогранников.
Некоторые из этих многогранников достаточно интересны по форме, а многогранник с параметрами dB - 90°, dL = 90° называется октаэдром.
Все грани, примыкающие к верхнему и нижнему полюсам, являются треугольными, а остальные грани — четырехугольными. С позиций компьютерной графики это выгодно отличает многогранники рассматриваемого типа
от других, например, правильных многогранников, у которых грани могут иметь значительно больше ребер, чем четыре.
1
Для построения изображения многогранников будем рисовать каждую грань, как полигон. Для вывода полигона требуется определить координаты всех его вершин и задать цвет заполнения.
Очевидно, что показ граней одним цветом дает неудовлетворительный результат — полностью теряется форма поверхности трехмерного объекта. Показ ребер (контуров полигонов граней) другим цветом немного улучшает восприятие (рис. 5.4).
Рис. 5.4. Неудачное изображение — все грани одного цвета
Построим изображение так, чтобы грани были окрашены в соответствии с законами отражения света. Общую схему алгоритма можно изобразить таким образом:
for (B=-90; BOO; B+=dB1 \ for (L=0; L<360; Ll+=dL)
x[0] = R cos В sin L ;
y[0] = R cos В cos L ;
z[0] = R sin В ;
x[l] = R cos (B+dB) sin L ;
y[l] = R cos (B+dB) cos L ;
z[l] = R sin (B+dB) ;
x[2] = R cos (B+dB) sin (L+dL) ;
у[2] = R cos (B+dB) cos (L+dL) ;
z[2] = R sin (B+dB) ;
x[3] = R cos В sin (L+dL) ;
y[3] = R cos В cos (L+dL) ;
z[3] = R sin В ;
(X[i], Y[i], Z[i]) = Поворот координат (x[i], y[i], z[i]) ; Определение вектора нормали по (X[i], Y[i], Z[i]) и определение цвета грани, учитывающего ее ориентацию относительно источника света.
Рисование выбранным цветом полигона грани с четырьмя вершинами (X[i], Y[i], Z[i]); }
Приведенную тут схему алгоритма не следует воспринимать как программу на языке С, а также сам алгоритм как оптимальный. В частности, здесь много лишних вычислений косинусов и синусов — количество таких операций обязательно нужно уменьшать, поскольку они выполняются в традиционных компьютерах очень медленно. Кроме того, здесь и далее мы будем рисовать все грани четырехугольниками, хотя, лишь незначительно усложнив данную
схему, можно предусмотреть и отдельную ветвь для треугольных граней полюсов.
Для удаления невидимых точек можно использовать Z-буфер, но можно перестроить цикл так, чтобы грани рисовались в таком порядке— начиная { самых дальних и заканчивая ближайшими.
Для определения цвета каждой грани нужно учесть взаимное расположение источника света и нормали грани. Как уже было показано выше для диффузионной и зеркальной моделей отражения, важно определить координаты вектора нормали. Мы уже рассматривали общий способ вычисления координат нормали к произвольной плоской грани (см. разд. 4.3). Этот способ, на основе векторного произведения, можно применить, естественно, и в данном случае,: Однако для таких многогранников как наши, нормали к граням можно вычислять значительно проще и быстрее. Поскольку радиус-вектор для каждой точки поверхности шара и есть вектор нормали, то координаты каждой точки поверхности шара являются координатами вектора нормали, если координаты центра шара равны (0, 0, 0). Таким образом, для вычисления координат вектора нормали к грани достаточно определить координаты точки поверхности шара, соответствующей центру грани. Или же можно взять сумму координат вершин грани и разделить на число вершин — это уже приближенный неточный способ.
На рис. 5.5 изображены многогранники с различным числом граней, причем источник освещения расположен сзади нас — на оси Z видовых координат.
Рис. 5.5. Закрашивание граней с учетом их ориентации
Как видим, для создания иллюзии гладкой поверхности шара нужно очень большое число граней (очевидно, что это число возрастает с увеличением видимого радиуса шара). Если рассматривать рис. 5.5, то при dB = dL - 5° многогранник уже похож на шар — отдельные грани достаточно сложно различить на типографском отпечатке этой книги (здесь также сказывается то, что при печати используется дизеринг, который сглаживает изображение).
Однако на экране дисплея грани все еще заметны. Глаз человека подчеркивает границы.
Закрашивание граней методом Гуро
Метод Гуро дает хорошие результаты для создания иллюзии гладкой поверхности шара, изображаемого достаточно большим числом плоских граней. В соответствии с этим методом для каждой грани нужно определить векторы в вершинах, затем для каждой вершины вычислить значение интенсивности отраженного света и потом, при выводе полигона грани, интерполировать интенсивности вершин для вычисления интенсивности отраженного света в каждой точке внутри грани.
Значительным удобством при вычислении координат нормалей в вершинах граней в нашем случае является то, что координаты вектора нормали в любой вершине грани совпадают с координатами самих вершин — если центр шара имеет координаты (0, 0, 0).
Рассмотрим случай, когда точечный источник света расположен на оси Z видовых координат. Используем диффузную модель отражения. В этом случае рассчитать интенсивность отраженного света в вершине грани можно следующим образом. Косинус угла между осью Z и нормалью
где Хn, Yn и Zn — видовые координаты вектора нормали. Поскольку координаты вектора нормали в вершине равны координатам вершин, а сумма квадратов координат (в том числе и видовых) для любой точки поверхности шара равна квадрату его радиуса, то
где Zv — видовая координата вершины грани.
Алгоритм вывода многогранника для метода Гуро аналогичен рассмотренному выше алгоритму. Запишем его следующим образом:
Поворот координат x[i], y[i], z[i] для определения видовых координат X[i],Y[i],Z[i].
Вычисление интенсивности отраженного света в вершинах. В простейша случае для диффузного рассеивания 1отр[л.] = 1ист * Z[i] / R.
Преобразование видовых координат в координаты устройства графического вывода (экранные координаты).
Рисование полигона с интерполяцией интенсивностей.
}
На рис. 5.6 представлены многогранники с различным числом граней, закрашенные в соответствии с методом Гуро.
Рис. 5.6. Закрашивание Гуро
Как видно на рис. 5.6, иллюзия гладкости поверхности достигается уже при достаточно малом числе граней. Так, например, при dB = dL = 20° в большей степени заметны неровности контура, чем погрешности закрашивания.
Учет расположения источника света