Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка по ИГС лаба№1.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
324.41 Кб
Скачать
  1. Геометрические преобразования

Этап выполнения аффинных преобразований был рассмотрен в рамках предыдущих лабораторных работ. Поэтому здесь рассмотрим лишь наиболее важные его моменты.

Переход из одной прямолинейной координатной системы в трёхмерном пространстве к другой описывается следующим образом:

[x* y* z* 1] = [x y z 1][A], где А – матрица преобразования. В частности, матрицы поворотов вокруг осей координат имеют следующий вид:

  • вокруг оси X на угол :

  • вокруг оси Y на угол :

  • вокруг оси Z на угол :

Матрица переноса (сдвиг, перемещение) на вектор  имеет вид:

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

  1. Хранить матрицу преобразований, умножая ее на матрицы изменений, после чего сохранять полученный результат. Изначально она является единичной.

Затем при повороте вокруг какой-либо оси умножается на соответствующую матрицу поворота, но построенную не по текущему значению угла поворота (, или ), а по изменению соответствующего угла (, ).

Другими словами, пусть А – матрица преобразований, изначально это единичная матрица, что соответствует исходному положению поверхности. При выполнении пользователем поворота вокруг одной из осей координат, нужно вычислить матрицу, соответствующую данному повороту R∆, и умножить матрицу А на R∆. После этого полученную матрицу А можно будет использовать непосредственно для выполнения преобразований точек поверхности. Если же произойдет изменение параметров поверхности, и , следовательно, будут изменены точки, соответствующие исходному положению поверхности, то достаточно будет выполнить их преобразования с использованием уже имеющейся у нас матрицы А. Недостаток этого метода в невозможности выполнить обратные преобразования.

  1. Базовый подход. Хранение цепочки последовательности произведенных действий.

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

Поскольку в данной работе возможность выполнения обратных преобразований не требуется, будем использовать первый способ. Его алгоритм следующий:

Обобщенный алгоритм:

{

если изменился какой-либо параметр поверхности

провести этап геометрического моделирования

если изменился угол поворота

умножить результирующую матрицу на соответствующую матрицу поворота

умножить координаты точек поверхности на результирующую матрицу

}

  1. Определение цвета точек поверхности

Один из простейших способов определения цвета (интенсивности) точки поверхности заключается в том, что он считается пропорционально косинусу угла, образованного между нормалью к данной точке и направлением на источник света. В данном случае наблюдатель и источник света совмещены и находятся в т.(0, 0, 1, 0). Чем меньше угол между нормалью и вектором к точке [0,0,1,0] , тем больше косинус этого угла, и соответственно тем больше интенсивность данного сегмента.

x

z

источник света и наблюдатель (0, 0, 1, 0)

В виде формулы это можно записать следующим образом:

Где -итоговая интенсивность сегмента;

-угол между вектором нормали к данному сегменту и вектором к точке наблюдения (освещения) - [0,0,1,0];

При положительном косинусе сегмент является внешним и -внешняя интенсивность, при отрицательном косинусе сегмент является внутренним, и -внутренняя интенсивность;

Обобщенный алгоритм определения цвета точки:

{

Вычислить нормаль поверхности в данной точке

Определение косинуса угла между направлением нормали и направлением на источник света (наблюдателя)

Определение цвета точки

}