Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КГ Лекции.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.3 Mб
Скачать

Координатные системы двух мерного геометрического конвейера и их преобразование

Мы рассмотрели набор базовых геометрических преобразований на плоскости и в пространстве. Теперь перейдем к рассмотрению основного механизма визуализации –геометрического конвейера. Почему собственно конвейер? С этим словом, у нас ассоциируется Генри Форд, впервые применивший конвейер при производстве автомобилей. Геометрический конвейер использует главный принцип любого конвейера – параллельность выполнения всех этапов технологического цикла. Так же как на сборочном конвейере крупного завода одновременно находятся десятки автомобилей на разной стадии готовности, в геометрическом конвейере могут одновременно обрабатываться несколько сцен. Когда одни из них только собираются, другие могут растеризоваться и демонстрироваться пользователю. Более того, составляющие одной сцены могут обрабатываться параллельно на разных ветках конвейера.

Знакомство начнем с двумерного конвейера, имеющего относительно простую внутреннюю структуру, так как все преобразования выполняются на плоскости и проецирование отсутствует. Модельные координаты опустим в силу того, что были рассмотрены нами ранее и в некоторых источниках явно не выделяются.

В двухмерном видовом конвейере используются декартовы системы координат, их три:

  • Мировые координаты (World coordinate - WC). Координатная система пользователя. Используется прикладным программистом для описания графического ввода и вывода, ее размеры зависят от реальных размеров моделируемых объектов.

  • Нормализованные координаты устройства (Normalize device coordinate - NDC). Независимая от устройств декартова система координат, приведенная к диапазону от 0 до 1. Используется для хранения данных, обеспечивает защиту от переполнения и потери точности.

  • Координаты устройства (Device coordinateDC). Координатная система, определяемая конкретным устройством вывода графической информации.

У стройство вывода графической информации в большинстве случаев имеет ограниченное рабочее пространство прямоугольной формы. Следовательно, мы не можем произвести вывод всех объектов, произвольно расположенных в координатной системе устройства. Часть объектов может оказаться за пределами рабочего пространства. Для преодоления данной проблемы определим в координатной системе устройства прямоугольную область и введем ограничение – на устройство будут выведены только примитивы, попавшие в заданную область. Это прямоугольник носит название поля вывода (ViewPort). Поле вывода не обязательно должно занимать всю рабочую область устройства. Например, мы можем определить в рабочей зоне устройства несколько непересекающихся полей вывода с тем, чтобы создать в них различные изображения (в принципе, можно и пересекающиеся, но это уже спецэффекты).

Введение данного ограничения делает нецелесообразным преобразование всех объектов сцены из одной координатной системы в другую. Зачем делать лишнюю работу, преобразовывая объекты, которые не попадут в поле вывода? Зададим в исходной координатной системе прямоугольную область, называемую окном (Window). Объекты или части объектов, принадлежащие этой области, необходимо подвергнуть преобразованию. Объекты и части объектов, не принадлежащие этой области, необходимо исключить из рассмотрения. Данная операция носит название отсечения (clipping).

Т аким образом, мы пришли к следующему: преобразование на плоскости между координатными системами задается двумя прямоугольниками: окном и полем вывода.

В рассматриваемом нами конвейере два преобразования: WC – NDC (из Window1 во ViewPort1) и NDC – DC (из Window2 во ViewPort2). Оба преобразования выполняются по одинаковой схеме. Рассмотрим ее.

Определим, как найти в поле вывода точку, соответствующую точке, заданной в окне. Для этого используем простую пропорцию откуда, выразим Х координату поля вывода через Х координату окна

в этой формуле выражение можно рассматривать как масштабирующий коэффициент.

очевидно, что формируют простой перенос. Обозначив его как Тх, приходим к конечной формуле . Проведя аналогичные рассуждения можно получить формулу для координаты Y - .

И переходя к матричной форме

Pv=PwST=PwM

[x’ y’ 1] = [x y 1]

Обратное преобразование, из поля вывода в окно, нам потребуется для выполнения лабораторных работ. Его необходимо найти самостоятельно.

Обратите внимание на то, что прямоугольники, определяющие окно и поле вывода должны быть подобны, т.е. иметь одинаковые пропорции между высотой и шириной (подобны), в противном случае масштабирующие коэффициенты по осям x и y будут различны. Следовательно, будут нарушаться пропорции всех отображаемых объектов.

С введением рассмотренных ограничений наш конвейер приобрел новые полезные свойства. Для упрощения примера, зафиксируем размер поля вывода и будем производить изменения окна. При переносе окна мы видим различные фрагменты сцены, т.е. происходит «прокрутка» изображения в поле вывода. При изменении размеров окна происходит изменение масштаба выводимого изображения, естественно с изменением видимой области фрагмента. Подобным образом в графических системах реализуется функция изменения масштаба (Zoom). Сложность возникает в интерактивных системах, где пользователь задает область сцены, которую хочет видеть увеличенной. Так как поле вывода зафиксировано, видимая область определяется только окном. Следовательно, пользователь задает образ нового окна, но делает это в координатах устройства. Для того, чтобы определить новое преобразование надо преобразовать образ окна из координат устройства в исходные координаты (в нашем случае в нормализованные). Сделать это можно с помощью преобразования, обратного рассмотренному преобразованию.

Лекция 4. OpenGL.

Что такое     OpenGL – дословно, Open Graphics Library, открытая графическая библиотека. OpenGL включает в свой состав около 200 команд. Набор команд и их интерфейс определяется стандартом, разработанным фирмой Silicon Graphics.

Существует много реализаций этой библиотеки, отличающихся операционной системой, языком программирования, для которого они предназначены, и авторами. Если вас не устраивает конкретная реализация, вы можете создать собственную, более эффективную.

Большинство реализаций OpenGL использует одинаковую последовательность стадий обработки выводимого изображения, которая называется конвейером визуализации OpenGL. Данный порядок не является обязательным, но может служить для изучения принципов работы конвейера.

Основное предназначение OpenGL - программирование трехмерной графики. С ее помощью вы можете визуализировать каркасные модели, закрашивать их, удалять невидимые линии и поверхности, освещать одним или несколькими источниками, создавать тени, накладывать текстуры и многое другое.

Однако, данная библиотека не является полноценным ядром графической системы, так как основное внимание уделено процессу визуализации. Две другие немаловажные компоненты - ввод информации и ее хранение, практически отсутствуют. Стандарт OpenGL не определяет концепций графического ввода и хранения графической информации. Прикладному программисту приходится реализовывать эти функции самому или использовать дополнительные библиотеки, расширяющие возможности OpenGL.

Среди наиболее известных: библиотека утилит OpenGL (GLU OpenGL Utility Library), инструментарий утилит библиотеки OpenGL (GLUT – Graphics Library Utility Toolkit) расширение OpenGL для X Window System (GLX – OpenGL Extention to the X Window System), библиотека для работы с оконной системой MS Windows (GlAux – OpenGL Auxilary) и другие.