§ 2.2 Визуализация алгебраических поверхностей 2-го порядка
Рассмотрим методы и алгоритмы построения реалистических пиксельных отображений пространственных объектов на экран при центральном проецировании.
В отличие от методов построения каркасных изображений, где для быстроты вычислений и вывода изображений на экран используется вывод изображения отрезками прямых линий, при окраске освещенных поверхностей необходим пиксельный вывод изображений, а соответственно и вычисление значений каждого пиксела отображаемой поверхности.
Значение пиксела выражается в полутоне цвета. Число полутонов для одного чистого цвета определяет цветовую разрешающую способность изображения.
Цветовая разрешающая способность устанавливается аппаратными средствами и реализуется программным средствами путем отображения объемных тел на плоский экран с определенной точки зрения и точек освещения.
Алгоритм метода окраски освещенных поверхностей следующий:
-
Из точки зрения
(рис.2.4) проводим луч a, проходящий
через визуализируемую поверхность и
попадающий на экран проецирования в
точку
; -
Луч зрения проходя через поверхность дает для поверхности 2-го порядка две точки
- ближняя к наблюдателю и
-
дальняя; -
В точке пересечения с поверхностью определяем вектор нормали N к ближней точке. Вычисляем угол a между вектором нормали N и направлением освещения L. Если угол равен нулю, то поверхность освещена максимально (луч освещения перпендикулярен поверхности в данной точке), если угол равен 90 градусов, то освещение равно нулю (луч освещения касается поверхности, скользит поверхности в данной точке), величина угла определяет уровень освещения;
-
Находим координаты точки пересечения луча зрения с экраном проецирования
; -
Вычисляем экранные координаты пиксела;
-
Присваиваем пикселу номер цвета (полутона освещения);
-
Выводим пиксел на экран;
-
Начиная сканирование поверхности с точки выбора (рис.2.5), и идя влево, затем вправо с переходом на строку вверх-вниз, в цикле определяем все проекции точек поверхности и получаем на экране окрашенную освещенную поверхность.
Рис. 2.4
Рис. 2.5
Рассмотрим математическое описание метода.
Визуализируем поверхность 2-го порядка, уравнение которой имеет общий вид
![]()
.
(2.1)
Уравнение прямой линии, проведенной через две точки в пространстве, имеет вид
;
(2.2)
Сканирование луча идет от глаза к экрану, проходя через поверхность, и начинается с точки выбора поверхности.
Размер шагов при решении математических уравнений вычисляется следующим образом. Например, разрешающая способность изображения равна 800 600. Физический размер пиксела на экране размером 256х192 мм (14”) по x равен 0,32 мм - по z равен 0,32 мм.
Примем текущие значения координат в мм:
-
пиксела на экране
-
по широте,
- по высоте;
- точки, лежащей на поверхности
- по широте объема,
- по глубине объема,
- по высоте объема.
Решение уравнений осуществляется в мм.
Меняя текущее экранное значение пиксела
по
от 0 до 799, а по
от 0 до 599 вычисляем координаты точек,
лежащих на экране и поверхности.
Определим координаты точки пересечения луча проецирования с поверхностью:
координата x
![]()
в уравнение (2) подставим
и выразим
через
![]()
(2.3)
координата z (необходимо инвертировать экранную систему в координатную систему пространства по высоте, так как начало экранной системы в левом верхнем углу экрана, а начало пространственной системы в левом нижнем углу пространства)
![]()
в уравнение (2) подставим
и выразим
через
![]()
(2.4)
Решим систему, состоящую из уравнений
(2.1), (2.2), подставив выражения (2.3) и (2.4) в
уравнение (2.1) и получив, опуская громоздкие
выкладки, уравнение относительно
![]()
(2.5)
где


,
решаем уравнение (2.5) для нахождения
![]()
![]()
(ближняя точка поверхности)
(дальняя точка поверхности).
Подставляя вычисленное значение
в (2.3) вычислим
.
Подставляя вычисленное значение
в (2.4) вычислим
.
Дифференцируя уравнение (2.1) и, подставляя
координаты точки поверхности
,
вычисляем координаты нормали
:
;
;
.
Вычисляем координаты вектора освещенности
в точке поверхности
и относительно точки освещения
:
;
(точечный источник освещения);
(параллельные лучи освещения);
.
Вычисляем угол между нормалью поверхности
в точке
и направлением освещения
![]()
![]()
Величина а изменяется в пределах от 0 до 1. Номер полутона цвета hcol определяется по формуле
,
где dcol - число полутонов цвета;
bcol - начальный номер цвета в цветовой таблице.
Для вывода пиксела на экран используется стандартная функция
.
Если в ходе сканирования при вычислении
подкоренное выражение приобретает
отрицательное значение, это означает,
что луч сканирования выходит за пределы
поверхности. В этом случае меняется
направление сканирования.
Порядок сканирования для минимизации числа проходов следующий:
-
От точки выбора поверхности проходим по строке вправо до границы поверхности;
-
От точки выбора поверхности проходим по строке влево до границы поверхности;
-
Определяем середину между границами поверхности;
-
От середины между границами поверхности переходим на одну строку вверх и повторяем процедуры прохода вправо и влево;
-
Повторяем процедуры 1...4 до нахождения верхней границы поверхности;
-
После от точки выбора поверхности переходим на одну строку вниз и повторяем процедуры 1...4 с движением вниз до нахождения нижней границы поверхности.
