Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
rgr.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
592.9 Кб
Скачать

3.2. Перспективная проекция

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

Учитывая также координату Z:

В матричной форме преобразования координат можно записать так:

Обратите внимание на то, что здесь коэффициенты матрицы зависят от координаты (в знаменателе дробей). Это означает, что преобразование координат является нелинейным (а точнее, дробно-линейным), оно относится к классу проективных преобразований.

Теперь рассмотрим общий случай – для произвольных углов наклона камеры ( и ) также как и для параллельной аксонометрической проекции.

Пусть ( ) – координаты для системы координат, повернутой относительно начальной системы ( ) на углы и . Тогда:

Запишем преобразования координат перспективной проекции в виде:

Последовательность преобразования координат можно описать так:

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

Для такой перспективной проекции плоскость проецирования перпендикулярна лучу, исходящему из центра ( ) = (0,0,0) и наклоненному под углом и . Если камеру отдалять от центра координат, то центральная проекция видоизменяется. Когда камера в бесконечности, центральная проекция вырождается в параллельную проекцию.

Укажем основные свойства перспективного преобразования в центральной проекции:

-- не сохраняется отношение длин и площадей;

--прямые линии изображаются прямыми линиями;

--параллельные прямые изображаются сходящимися в одной точке.

4. Изображение шара в виде многогранника с закрашиванием граней

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

Мы будем рассматривать достаточно узкий класс многогранников. Отличи­тельным признаком рассматриваемых многогранников является то, что у них ребра ориентированы вдоль меридианов и параллелей. Такие многогранники будем описывать двумя параметрами - шаг по широте (dB) и шаг по долготе (dL) в градусах. Кроме того, будем считать эти многогранники вписанными изнутри в шар, то есть вершины каждой грани лежат на поверхности шара. Очевидно, что с увеличением количества граней такие многогранники все больше приближаются к шару. Иными словами, чем меньше dB и dL, тем лучше поверхность многогранника аппроксимирует форму поверхности шара.

Некоторые из этих многогранников достаточно интересны по форме, а мно­гогранник с параметрами dB = 90°, dL = 90° называется октаэдром.

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

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

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

Построим изображение так, чтобы грани были окрашены в соответствии с законами отражения света. Общую схему алгоритма можно изобразить та­ким образом:

for (B=-90; BOO; B+=dB)

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-буфер, но можно пе­рестроить цикл так, чтобы грани рисовались в таком порядке - начиная с самых дальних и заканчивая ближайшими.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]