Главная страница

Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)


Скачать 319.62 Kb.
НазваниеЛекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
Дата11.01.2022
Размер319.62 Kb.
Формат файлаdocx
Имя файлаLecture_Programming_2021_09_01.docx
ТипЛекции
#328427
страница29 из 36
1   ...   25   26   27   28   29   30   31   32   ...   36

Графические библиотеки

  1. Библиотека BGI


Чтобы сделать процесс создания графических изображений более простым и эффективным фирма Borland International разработала специальную библиотеку GRAPH, а также набор графических драйверов, позволяющих работать с различными типами видеоадаптеров. Графический драйвер – это вспомогательная программа-посредник, обеспечивающая взаимодействие пользовательских программ с конкретным графическим устройством. Графические драйверы хранятся в файлах с расширением .BGI (Borland Graphic Interface).

Библиотека предоставляет процедурно-ориентированный интерфейс управления экраном. Ключевым понятием являются текущие настройки (положения указателя, цвета, типа линии и заливки – и проч.). Изображения формируются с помощью набора примитивов путём вызова соответствующих функций. При этом примитивы выводятся с учётом текущих настроек.
      1. Графика в Borland C++ Builder


Borland C++ Builder имеет определенный набор компонентов и классов, позволяющий не только рисовать графические примитивы, но и работать с изображениями, шрифтами и графическими файлами. Принципы работы с графическими изображениями в Borland C++ Builder основаны на общих принципах создания графических объектов в операционной системе Windows. Именно операционная система Windows предоставляет программисту средства интерфейса графических устройств (Graphics Device Interface, или сокращенно GDI). С GDI тесно связано понятие "Device Context" (DC) - контекста графического устройства, или, утрируя, то, на чём выполняется изображение. DC - универсальное устройство вывода для которого можно использовать одинаковые функции GDI для экрана, принтера и других устройств вывода. Это возможно потому, что и сама операционная система Windows является не зависящей от устройств системой (device independent). Со стороны Windows это обеспечивается библиотекой GDI32.dll, а со стороны устройства - драйвером этого устройства. Связующим звеном между программой и устройством и является контекст устройства. Программа для вывода изображения должна получить хэндл контекста устройства, т. е. хэндл структуры, содержащей набор характеристик этого устройства. В этот набор входят битовые карты для изображений, перья, кисти, шрифты и т.д.

Программа обращается к контексту устройства через функции GDI.

В Windows поддерживаются следующие типы контекстов устройств:

  • контекст дисплея;

  • контекст принтера;

  • контекст в памяти (моделирует в памяти устройство вывода);

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

Когда программе требуется контекст устройства, она получает его уже заполненным значениями по умолчанию - так называемый текущий объект. Контекст устройства можно изменить. Программа может создать новый объект, и сделать его текущим. Замещенный объект из памяти не удаляется и его можно восстановить. Изменить значения характеристики можно только через замену объекта.

Используя функции GDI возможно оперировать с графическими объектами и получать графические изображения (эта возможность описана в разделе "Основные графические объекты и CDI"). В тоже время, работа c функциями GDI требовала от программиста выполнения множества вспомогательных и рутинных действий и большого внимания, что привело сначала (в старом добром Borland C++ без добавки Builder) к появлению OWL (Object Windows Library). В OWL функции GDI инкапсулированы и перегружены в классах (многие функции инкапсулированы как встроенные - inline функции, которые непосредственно переводятся в эквивалентные операторы WinApi и, как результат, потери в эффективности кода при "надстройки" OWL не было).

Средства Borland C++Builder используют все возможности GDI и OWL, но на более высоком уровне и, тем самым, еще более упрощают труд программиста. В тоже время, прямое обращение приложений к отдельным функциям Windows GDI также не исключается. И, хотя применение графических функций совместно с компонентами и классами Borland C++ Builder представляют собой более перспективную методику создания графики в приложении, но, на взгляд автора, старые добрые методы забывать не стоит, хотябы потому, что множество текстов программ многих авторов написано именно "по старому" и, врядли кто будет отрицать - только доскональное знание и понимание "изнутри" принципов работы с графикой дают возможность создавать по настоящему эффективные приложения (ровно как, не зная ассемблера, не поймешь и никакого другого языка).

Обобщая, можно сказать - Borland C++ Builder имеет возможность и прямого вызова функции GDI с использованием контекста устройства и может использовать собственный интерфейс для работы с графикой, через свойства своих компонент.
      1. Библиотека OpenGL


OpenGL – это программный интерфейс к графической аппаратуре. Этот интерфейс состоит приблизительно из 250 отдельных команд (около 200 команд в самой OpenGL и еще 50 в библиотеке утилит), которые используются для указания объектов и операций, которые необходимо выполнить, чтобы получить интерактивное приложение, работающее с трехмерной графикой.

Библиотека OpenGL разработана как обобщенный, независимый интерфейс, который может быть реализован для различного аппаратного обеспечения. По этой причине сама OpenGL не включает функций для создания окон или для захвата пользовательского ввода; для этих операций вы должны использовать средства той операционной системы, в которой вы работаете. По тем же причинам в OpenGL нет высокоуровневых функций для описания моделей трехмерных объектов. Такие команды позволили бы вам описывать относительно сложные фигуры, такие как автомобили, части человеческого тела или молекулы. При использовании библиотеки OpenGL вы должны строить необходимые модели при помощи небольшого набора геометрических примитивов – точек, линий и многоугольников (полигонов).

Тем не менее, библиотека, предоставляющая описанные возможности может быть построена поверх OpenGL. Библиотека утилит OpenGL (OpenGL Utility Library -- GLU) предоставляет множество средств для моделирования, например, квадрические поверхности, кривые и поверхности типа NURBS. GLU – стандартная часть любой реализации OpenGL. Существуют также и более высокоуровневые библиотеки, например, Fahrenheit Scene Graph (FSG), которые построены с использованием OpenGL и распространяются отдельно для многих ее реализаций. В следующем списке коротко описаны основные графические операции, которые выполняет OpenGL для вывода изображения на экран.

1. Конструирует фигуры из геометрических примитивов, создавая математическое описание объектов (примитивами в OpenGL считаются точки, линии, полигоны, битовые карты и изображения).

2. Позиционирует объекты в трехмерном пространстве и выбирает точку наблюдения для осмотра полученной композиции.

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

4. Преобразует математическое описание объектов и ассоциированной с ними цветовой информации в пиксели на экране. Этот процесс называется растеризацией (или растровой разверткой).

В течение всех этих этапов OpenGL может производить и другие операции, например, удаление частей объектов, скрытых другими объектами. В дополнение к этому, после того, как сцена растеризована, но до того, как она выводится на экран, вы можете производить некоторые операции с пиксельными данными, если это необходимо.
      1. Библиотека directX


Изначально нацеленный на разработку видеоигр, DirectX стал популярен и в других областях разработки программного обеспечения. К примеру, DirectX, наряду с OpenGL, получил очень широкое распространение в инженерном/математическом ПО.

В 1994 году Microsoft была практически готова выпустить следующую версию Windows — Windows 95. Главным фактором, определяющим, насколько популярна будет новая ОС, являлся набор программ, которые можно будет запускать под её управлением. В Microsoft пришли к выводу, что, пока разработчики видят MS-DOS более подходящей для написания игровых приложений, коммерческий успех новой ОС весьма сомнителен.

MS-DOS позволяла разработчику получить прямой доступ к видеокарте, клавиатуре/мыши/джойстику и прочим частям системы, в то время как Windows 95, с её защищённой моделью памяти, предоставляла более стандартизованный, но в то же время весьма ограниченный и накладный доступ к устройствам. Microsoft нуждалась в новом способе дать разработчику всё, что ему необходимо. Айслер (Eisler), Сэйнт Джон (St. John), и Энгстром (Engstrom) решили эту проблему, назвав само решение DirectX.

Первый релиз DirectX был выпущен в сентябре 1995 года, под названием «Windows Game SDK».

Ещё до появления DirectX, Microsoft включила OpenGL в ОС Windows NT. Direct3D позиционировался как замена OpenGL в игровой сфере. Отсюда берёт своё начало «священная война» между сторонниками кросс-платформенной OpenGL и доступной лишь в Windows (в том числе Windows NT) Direct3D. Так или иначе, остальные части DirectX очень часто комбинируются с OpenGL в компьютерных играх, так как OpenGL как таковой не подразумевает функциональность уровня DirectX (например, доступ к клавиатуре/джойстику/мыши, поддержка звука, игры по сети и т. д.).

DirectX является базой для Xbox API. Xbox API схож с DirectX 8.1, но обновление версии, как и на других консолях того времени, невозможно.

В 2002 году Microsoft выпустила DirectX 9 с улучшенной и расширенной поддержкой шейдеров. С 2002 года DirectX неоднократно обновлялся. В августе 2004 года в DirectX была добавлена поддержка шейдеров версии 3.0 (DirectX 9.0c).

В апреле 2005 интерфейс DirectShow был перемещён в Microsoft Platform SDK.
    1. 1   ...   25   26   27   28   29   30   31   32   ...   36


написать администратору сайта