- •Содержательная и формальная постановки задачи
- •Структура решения
- •Моделирование поверхности
- •Программное представление поверхности:
- •Геометрические преобразования
- •Определение цвета точек поверхности
- •Вычисление нормали поверхности в данной точке
- •Определение косинуса угла между направлением нормали и направлением на источник света (наблюдателя)
- •Определение косинуса угла между нормалью и векторов источника света
- •Определение цвета точки
- •Подсчёт нормалей можно осуществить с помощью 2 способов:
- •Определение цвета сегмента
- •Проецирование
- •Визуализация
- •1.Платформа .Net
- •Описание реализации применяемых методов
- •Моделирование поверхности в исходном положении
- •Геометрические преобразования
- •Определение цвета сегмента поверхности
- •Визуализация
- •Проецирование.
- •Визуализация.
- •Руководство пользователя
- •Результаты
-
Подсчёт нормалей можно осуществить с помощью 2 способов:
-
Метод Ньюэла
-
Через векторное произведение
-
Метод Ньюэла
(вычисление коэффициентов (a, b, c , d) плоскости, заданной n вершинами, в общем случае, не лежащих на одной плоскости) . Если плоскость представляется в виде уравнения Ax + By + Cz + D = 0, то согласно этому методу:
Где если i=n, то j=1, иначе j=i+1, а вычисляется с помощью любой точки на плоскости D = – ( Axi+ Byi+ Czi).
При определении методом Ньюэла (суть которого – усреднение векторных произведений рёбер, исходящих из вершин многоугольника) мы в зависимости от последовательности обхода точек контура многоугольника можем получить одну и ту же плоскость, но нормаль у неё может быть направлена в две противоположные стороны. Чтобы избежать такой ситуации надо при вычислении нормалей треугольников обходить их в одном направлении.
-
Через векторное произведение сторон треугольника
Пусть у нас есть координаты 2-ух векторов, каждый из которых представляет сторону треугольника(зная вершины треугольника можно найти вектора его образующие, вычитая из координат конца координаты начала). Вектор A имеет координаты (ax, ay, az). Вектор B координаты(bx,by,bz).
Тогда координаты вектора нормали находятся из векторного произведения с помощью определителя:
=
Таким образом координаты вектора нормали:
-
Определение цвета сегмента
Определение цвета сегмента осуществляется следующим образом: сначала определяется интенсивность в точке принадлежащей сегменту, затем вычисляется цвет точки (см. пункт определение цвета точки), после чего этот цвет присваивается точкам сегмента (треугольника), то есть происходит сглаживание.
Обобщенный алгоритм:
{
для каждого имеющегося полигона
вычислить нормаль
вычислить косинуса угла между нормалью и наблюдателем
если косинус положительный,
то сегмент является внешним
иначе
внутренним
вычислить интенсивность цвета точки
присвоить цвет точки сегменту
}
-
Проецирование
Данный этап уже рассматривался ранее в лабораторной работе №2 по Компьютерной графике, и в данной работе он выполняется абсолютно аналогично.
-
Визуализация
В данной работе нужно будет осуществлять 2 вида визуализации изображения: визуализация каркаса и визуализация с flat-закраской.
Визуализация каркаса представляет собой тривиальную задачу: имеется набор точек, соединенных ребрами, известны экранные координаты точек, необходимо выполнить визуализацию этих ребер. Такая задача уже неоднократно решалась нами.
При визуализации с применением flat-сглаживания необходимо закрашивать каждый сегмент поверхности соответствующим ему цветом.
Вообще говоря, задача закрашивания области не является тривиальной, и существует множество алгоритмов ее решения. Однако, можно обойтись и стандартными функциями, выполняющими данное действие. Такие функции наряду с функциями для визуализации графических примитивов входят в состав базовых библиотек если не всех, то большинства языков программирования. Поскольку в данной работе используется flat-метод сглаживания, при котором каждый полигон закрашивается однородно одним цветом, то использование таких стандартных функций является оптимальным решением.