-
Notifications
You must be signed in to change notification settings - Fork 9
24. Алгоритм плавающего горизонта.
Для хранения максимальных значений y при каждом значении x используется массив, длина которого равна числу различимых точек (разрешению) по оси x в пространстве изображения. Значения, хранящиеся в этом массиве, представляют собой текущие значения "горизонта". Поэтому по мере рисования каждой очередной кривой этот горизонт "всплывает". Фактически этот алгоритм удаления невидимых линий работает каждый раз с одной линией.
Алгоритм работает очень хорошо до тех пор, пока какая-нибудь очередная кривая не окажется ниже самой первой из кривых. Нижняя сторона поверхности делается видимой, если модифицировать этот алгоритм, включив в него нижний горизонт, который опускается вниз по ходу работы алгоритма. Это реализуется при помощи второго массива, длина которого равна числу различимых точек по оси x в пространстве изображения. Этот массив содержит наименьшие значения y для каждого значения x.
Проблема с зазубренностью боковых ребер решается включением в массивы верхнего и нижнего горизонтов ординат, соответствующих штриховым линиям. Это можно выполнить эффективно, создав ложные боковые ребра.
Суть алгоритма
- обработать левое боковое ребро
- для каждой точки очередной кривой проверить условие видимости 3. если видимость изменилась, вычислить точку пересечения
- изобразить видимую часть кривой
- заполнить массивы горизонтов
- обработать правое боковое ребро
Обработка боковых рёбер Левое: если Pk – первая точка первой кривой , то запоминаем её в качестве предыдущей Pk-1, если на не первой – соединяем K и K-1 и запоминаем текущую как K-1. Аналогично правое. В массивы верхнего и нижнего горизонтов заносим ординаты бокового ребра.