Закрашенные области можно обрабатывать отсекающими выпуклыми окнами, используя расширение схемы параметрического представления прямых. Кроме того, метод Уэйлера-Азертона позволяет обрабатывать любую многоугольную закрашенную область, используя любое отсекающее окно в форме многоугольника. Закрашенные области можно вырезать и окнами с нелинейными границами, используя аппроксимацию многоугольниками или обрабатывая закрашенные области отсекающими окнами с криволинейными границами.
Самым быстрым методом отсечения текста является стратегия “все или ничего”, которая полностью отсекает строку текста, если любая часть строки находится вне границы отсекающего окна. Строку текста можно также обработать, удалив только те символы строки, которые не находятся полностью в отсекающем окне. Наконец, самым точным методом отсечения текста является применение схемы отсечения точек, линий, многоугольников или кривых к отдельным символам строки в зависимости от того, определены символы как точечные изображения или эскизные шрифты.
Хотя OpenGL предназначен для трехмерных приложений, существует двухмерная функция GLU, задающая стандартное прямоугольное отсекающее окно во внешних координатах. В OpenGL координаты отсекающего окна являются параметрами проективного преобразования. Следовательно, вначале необходимо вызвать режим матрицы проектирования. Затем можно задать поле просмотра, используя функции стандартной библиотеки OpenGL, и окно на экране, используя функции GLUT. Существует множество функций GLUT, позволяющих настраивать различные параметры окна на экране. В табл. 6.1 приведено резюме по функциям двухмерного наблюдения OpenGL. Кроме того, в таблице перечислены некоторые функции, связанные с наблюдением.
ТАБЛИЦА 6.1. Резюме по функциям OpenGL двухмерного наблюдения
Функция |
Описание |
glu0rtho2D |
Задает координаты отсекающего окна как параметры двухмерной ортогональной проекции |
glViewport |
Задает параметры поля просмотра в экранных координатах |
glGetlntegerv |
Использует аргументы GL_VIEWPORT и vpArray для получения параметров текущего активного поля просмотра |
glutlnit |
Инициализирует библиотеку GLUT |
glutInitWindowPosition |
Задает координаты левого верхнего угла окна на экране |
glutlnitWindowSize |
Задает ширину и высоту окна на экране |
glutCreateWindow |
Создает окно на экране (которому присваивается целочисленный идентификатор) и задает название окна на экране |
glutlnitDisplayMode |
Выбирает параметры, такие как режим буферизации и цвета для окна на экране |
glClearColor |
Задает RGB-цвет фона окна на экране |
glClearlndex |
Задает фоновый цвет окна на экране с использованием режима индексации |
glutDestroyWindow |
Задает число - идентификатор удаляемого окна |
glutSetWindow |
Задает число - идентификатор текущего окна |
glutPositionWindow |
Обновляет положение на экране текущего окна |
glutReshapeWindow |
Обновляет ширину и высоту текущего окна на экране |
glutFullScreen |
Устанавливает размер текущего окна равным размеру экрана |
glutReshapeFunc |
Задает функцию, вызываемую при изменении размера окна |
glutlconifyWindow |
Превращает текущее окно в пиктограмму |
glutSetlconTitle |
Задает метку для пиктограммы окна |
glutSetWindowTitle |
Задает новое название текущего окна |
Функция |
Описание |
glutPopWindow |
Перемещает текущее окно “наверх”; т.е. ставит его перед всеми остальными окнами |
glutPushWindow |
Перемещает текущее окно “вниз”; т.е. располагает его позади всех остальных окон |
glutShowWindow |
Возвращает текущее окно на экран |
glutCreateSubWindow |
Создает окно второго уровня в данном окне |
glutSetCursor |
Определяет форму курсора экрана |
glutDisplayFunc |
Вызывает функцию создания изображения в текущем окне |
glutPostRedisplay |
Обновляет содержимое текущего окна |
glutMainLoop |
Выполняет программу компьютерной графики |
glutldleFunc |
Задает функцию, выполняемую, когда система не выполняет никаких действий |
glutGet |
Запрашивает систему о заданном параметре состояния |
ЛИТЕРАТУРА
Алгоритмы отсечения линий обсуждаются в работах [73, 191, 231, 335]. Методы повышения скорости алгоритма отсечения линий Коэна-Сазерленда представлены в статье [86].