- •Физические основы цвета и восприятие его человеком.
- •Удаление невидимх граней алгоритмом z-буфера.
- •Кодирование цветов в вычислительной технике.
- •Виды кг
- •Растровая графика. Базовые алгоритмы построения отрезка
- •Методы приоритетов
- •Алгоритм Брезенхейма для построения отрезка.
- •Кривая Безье
- •А лгоритмы закраски области заданным цветом. Простой алгоритм с упорядоченным списком ребер
- •Алгоритмы заполнения с затравкой
- •Методы построчного сканирования для криволинейных поверхностей
- •Алгоритмы Варнака и Робертса
- •Алгоритм Аппеля (метод трассировки лучей)
- •Однородные координаты. Геометрическая интерпретация
- •Виды проецирования.
- •Двумерное отсечение. Простой алгоритм определения видимости.
- •Двумерное параметрическое отсечение. Отсечение средней точкой
- •Двумерный алгоритм Лианга-Барски
- •Алгоритм Кируса-Бека
- •Зеркальное отражение. Закраска методом Гуро.
- •Зеркальное отражение. Закраска методом Фонга
- •Текстурирование.
- •Свето-теневой анализ. Метод излучательности
- •Отображения в окне. Виды координат
- •Растровая развертка. Алгоритмы отрезков и сплошных областей
- •Трехмерное отсечение. Обобщение
- •Алгоритм Плавающего горизонта
- •Алгоритм Вейлера-Азертона
- •Прозрачность. Свето-теневой анализ
Трехмерное отсечение. Обобщение
Двумя наиболее распространенными формами трехмерных отсекателей являются: прямоугольный параллелепипед, т. е. полый брусок, используемый при параллельном или аксонометрическом проецировании, а также усеченная пирамида, часто называемая пирамидой видимости, которая используется при центральном проецировании. Существует, кроме того, необходимость отсекать и по нестандартным объемам. Как и при двумерном отсечении, отрезки, которые полностью видимы или тривиально невидимы, можно идентифицировать с использованием обобщения кодов концевых точек Коэна-Сазерленда. В трехмерном случае используется 6-битовый код. Вновь самый правый бит кода считается первым. В биты кода заносятся единицы с помощью обобщения двумерной процедуры. Конкретно единица заносится: в первый бит - если конец ребра левее объема, во второй бит - если конец ребра правее объема, в третий бит - если конец ребра ниже объема, в четвертый бит - если конец ребра выше объема, в пятый бит - если конец ребра ближе объема, в шестой бит - если конец ребра дальше объема. В противном случае в соответствующие биты заносятся нули. И опять, если коды обоих концов отрезка равны нулю, то оба конца видимы и отрезок тоже будет полностью видимым. Точно так же, если побитовое логическое произведение кодов концов отрезка не равно нулю, то он полностью невидим. Если же это логическое произведение равно нулю, то отрезок может оказаться как частично видимым, так и полностью невидимым. В этом случае необходимо определять пересечения отрезка с гранями отсекающего объема. Поиск кодов точки относительно отсекающего прямоугольного параллелепипеда является прямым обобщением соответствующего двумерного алгоритма.
Алгоритм Плавающего горизонта
Алгоритм плавающего горизонта чаще всего используется для удаления невидимых линий трехмерного представления функций, описывающих поверхность в виде
F(x,y,z) = 0
Поскольку в приложениях в основном интересуются описанием поверхности, этот алгоритм обычно работает в пространстве изображения. Главная идея данного метода заключается в сведении трехмерной задачи к двумерной путем пересечения исходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координат x, y или z. Например, если указанные параллельные плоскости определяются постоянными значениями z. Функция F(x,у,z) = 0 сводится к последовательности кривых, лежащих в каждой из этих параллельных плоскостей, например к последовательности y = f(x,z) или х = g(y,z), где z постоянно на каждой из заданных параллельных плоскостей.
Итак, поверхность теперь складывается из последовательности кривых, лежащих в каждой из этих плоскостей. Здесь предполагается, что полученные кривые являются однозначными функциями независимых переменных. Если спроецировать полученные кривые на плоскость z = 0, то сразу становится ясна идея алгоритма удаления невидимых участков исходной поверхности. Алгоритм сначала упорядочивает плоскости z = const по возрастанию расстояния до них от точки наблюдения. Затем для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, т. е. для каждого значения координаты х в пространстве изображения определяется соответствующее значение y. Алгоритм удаления невидимой линии заключается в следующем:
Если на текущей плоскости при некотором заданном значении х соответствующее значение y на кривой больше значения y для всех предыдущих кривых при этом значении х, то текущая кривая видима в этой точке; в противном случае она невидима. Алгоритм работает очень хорошо до тех пор, пока какая-нибудь очередная кривая не окажется ниже самой первой из кривых. Подобные кривые, естественно, видимы и представляют собой нижнюю сторону исходной поверхности, однако алгоритм будет считать их невидимыми. Нижняя сторона поверхности делается видимой, если модифицировать этот алгоритм, включив в него нижний горизонт, который опускается вниз по ходу работы алгоритма. Это реализуется при помощи второго массива, длина которого равна числу различимых точек по оси х в пространстве изображения. Этот массив содержит наименьшие значения y для каждого значения х. Алгоритм теперь становится таким: Если на текущей плоскости при некотором заданном значении х соответствующее значение y на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом х, то текущая кривая видима. В противном случае она невидима.