GMSAPR
.pdf51
собой часть ОС Windows Vista. DirectX 10 использует отличную от DirectX 9.0 модель управления: DirectX 10 предоставляет набор требований к аппаратной части, минимальный стандарт функциональности, необходимой для того, чтобы аппаратное устройство было DirectX-совместимым.
Стремление разработчиков абстрагироваться от конечного конкретного оборудования понятно — никто сейчас не хотел бы изучать спецификации работы с каждой конкретной видео или звуковой картой. Чёткое разделение области системного и прикладного программирования, жестко определенный для каждой новой версии стандарт, гарантированность работы с предыдущими версиями — это и есть суть DirectX.
OpenGL (Open Graphics Library — открытая графическая библиотека) — спецификация, определяющая независимый от языка программирования кроссплатформенный программный интерфейс для написания приложений, использующих двумерную и трехмерную компьютерную графику.
Включает более 250-ти функций для рисования сложных трехмерных сцен из простых примитивов. Используется при создании видеоигр, различных САПР, виртуальной реальности, визуализации в научных исследованиях.
История OpenGL ведется с 1992 года. Компания Silicon Graphics создала его как открытый стандарт. На данный момент OpenGL находится под контролем комитета Architectural Review Board (ARB), куда входят представители наиболее влиятельных в 3D-секторе корпораций - nVidia, ATI, SGI, Apple, Intel, id Software а так же многие другие.
OpenGL, создававшийся для профессионального сектора, прочно в нем закрепился во многом благодаря своей переносимости, а вот нишу PC-игр практически полностью уступил своему конкуренту.
На базовом уровне, OpenGL — это просто спецификация, то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации — библиотеки функций, соответствующих набору функций
52
спецификации. Реализация использует возможности оборудования там, где это возможно. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители должны пройти специфические тесты (conformance tests — тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL реализация.
Эффективные реализации OpenGL существуют для Windows, Unix платформ, PlayStation 3 и Mac OS. Эти реализации обычно предоставляются изготовителями видеоадаптеров и активно используют возможности последних. Существуют также чисто программные реализации спецификации OpenGL, например, библиотека Mesa.
Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и полигонов с последующей математической обработкой полученных данных и построением растровой картинки на экране и/или в памяти. Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который, по сути, является дискретным автоматом.
Стандарт OpenGL, с появлением новых технологий, позволяет отдельным производителям добавлять в библиотеку функциональность через механизм расширений. Обычно, расширения, одобренные Консорциумом ARB, включаются в одну из последующих спецификаций OpenGL.
Существует ряд библиотек, созданных поверх или в дополнение к OpenGL. Например, библиотека GLU, являющаяся практически стандартным дополнением OpenGL и всегда её сопровождающая, построена поверх последней, то есть использует её функции для реализации своих возможностей. Другие библиотеки, как, например, GLUT и SDL, созданы для реализации возможностей, недоступных в OpenGL: создание интерфейса пользователя (окна, кнопки, меню и др.), настройка контекста рисования (область рисования, использующаяся OpenGL), обработка сообщений от устройств ввода/вывода (клавиатура, мышь и др.), а также работа с файлами.
53
OpenGL только оперирует набором геометрических примитивов (точки, линии, полигоны), из которых создаются все трехмерные объекты. Порой подобный уровень детализации не всегда удобен при создании сцен. Поэтому поверх OpenGL были созданы более высокоуровневые библиотеки, такие как Open Inventor и VTK. Данные библиотеки позволяют оперировать более сложными трехмерными объектами, что облегчает и ускоряет создание трехмерной сцены.
Один из основных преимуществ OpenGL – является кроссплатформенность. Официальный сайт OpenGL имеет ссылки на привязки для языков Java, Fortran 90, Perl, Pike, Python, Ada и Visual Basic, C++ и C#.
По сравнению с DirectX, главной проблемой OpenGL, как ни странно, является сам Консорциум ARB — в него входит большое количество компаний с различными интересами, что приводит к длительному периоду принятия новой версии спецификации. В OpenGL версии 2.0 компания 3Dlabs предложила ряд существенных дополнений к стандарту, наиболее значимым из которого был GLSL (OpenGL Shading Language).
Перейдем к сравнению технологий. DirectX построен по объектноориентированной схеме, а OpenGL по процедурной. Что лучше? Программа на GL одинаково "хорошо" выглядит и на C++, и на чистом C, чего не скажешь о DX (хотя это надуманное преимущество, сейчас мало кто пишет на C, особенно под Windows). А вот простота архитектуры GL - неоспоримый плюс: GL работает исключительно с примитивами (треугольники, отрезки и точки) и управляется набором булевых переменных, которые позволяют включать или отключать некоторые функции - например, накладывать текстуру или нет, использовать ли освещение и т. д.
Большая часть создателей игр выбирает DirectX за удобную поддержку современных возможностей, остальные предпочитают OpenGL за переносимость и простоту написания программ.
54
2.8 Заключение
Данная глава описывает далеко не полный перечень технологий и инструментальных средств, которые можно привлечь для реализации САПРсистем (и не только), однако, позволяет получить общее представление об основных принципах, которые должен знать любой программист.
Мы рассмотрели:
•Программирование под ОС Windows — что такое API и DLL, работа с памятью и проецируемыми файлами, что такое процессы, потоки, и какие существуют способы их синхронизации;
•Cтруктуру стандартного Windows приложения — функция WinMain и сообщения в Windows, обработка сообщений и акселераторов («горячих клавиш»);
•Библиотека классов Microsoft Foundation Classes;
•Особенности написания приложений для 32-, 64-разрядных и обоих видов платформ Windows;
•Инструменты Microsoft VisualStudio 2005 .NET и библиотека Microsoft Software Developer Network (MSDN);
•Платформа .NET Framework — её структура и преимущества в сравнении со стандартными подходами, сборка мусора;
•Язык С# — самый подходящий язык для разработки сложных (и не очень) программных систем.
•Графические библиотеки: GDI и GDI+ — что такое контекст устройств, их отличия; DirectX и OpenGL — структура, предназначение и отличия.
Надеемся, что данный материал поможет студентам в создании современных и качественных программных систем.
55
3 Основные понятия компьютерной графики
Геометрическое моделирование – это частный подраздел компьютерной графики. На младших курсах отводится достаточно много времени на изучение компьютерной графики, однако будет не лишним напомнить её основы.
В данной главе рассматриваются основные понятия и определения компьютерной графики: растровая и векторная графика, модели представления цветов RGB и CMYK, графические форматы, сжатие данных — с потерями и без потерь.
3.1 Цели и задачи компьютерной графики
Понятие "компьютерная графика" объединяет довольно широкий круг операций по обработке графической информации с помощью компьютера. Причем наблюдается явная тенденция "компьютеризации" изображений, циркулирующих в обществе. Стали обыденностью термины "цифровое фото" и "видео". Западные кинорежиссеры давно уже пытаются испугать нас ужасами будущего, захваченного компьютерными монстрами, подсовывающими людям виртуальный суррогат вместо прекрасной реальности. С восприятием и обработкой визуальной информации непосредственно связано примерно 20% мозга человека. Благодаря зрению мы получаем по разным оценкам от 70 до 90% сведений об окружающем мире.
В компьютерной графике можно выделить несколько основных направлений.
•Визуализация научных (расчетных или экспериментальных)
данных. Большинство современных математических программных пакетов (например, Maple, MatLab, MathCAD) имеют средства для отображения графиков, поверхностей и трехмерных тел, построенных на основе каких-либо расчетов. Кроме того, графическая информация может активно использоваться в самом
56
процессе вычислений. Например, в системе Image, разработанной на КСУП ТУСУР, визуальные образы, выводимые на экран, являются основой для решения математических и проектных задач. Визуализация позволяет представить большой объем данных в удобной для анализа форме и широко используется при обработке результатов различных измерений и вычислений.
•Геометрическое проектирование и моделирование. Это направление компьютерной графики связано с решением задач начертательной геометрии — построением чертежей, эскизов, объемных изображений с помощью программных CAD-систем, например, AutoCAD. Существует большое количество специализированных CAD-систем в электротехнике, машиностроении, архитектуре и т. д.
•Распознавание образов. Задача распознавания и классификации графической информации является одной из ключевых и при создании искусственного интеллекта. Уже в наши дни компьютеры распознают образы повсеместно, например: системы идентификации футбольных хулиганов у входа на стадион; анализ аэро- и космических фотоснимков; системы сортировки, наведения и т. д. Самый известный пример распознавания образов — сканирование и распознавание текста в набор отдельных символов, формирующих слова, для чего служит, например, программа
FineReader.
•Изобразительное искусство. К этому направлению можно отнести разнообразную графическую рекламу, видеофильмы и мультипликацию. В качестве примера популярных программ из этой области можно назвать Adobe Photoshop (обработка растровых изображений), CorelDRAW (создание векторной графики), 3DS Max (трехмерное моделирование).
57
•Виртуальная реальность. Реальность, даже виртуальная, подразумевает воздействия на всю совокупность органов чувств человека, но в первую очередь на его зрение. К компьютерной графике можно отнести задачи моделирования внешнего мира в различных приложениях: от компьютерных игр до тренажеров. Кроме того, не стоит забывать о компьютерах-злодеях, которые используют виртуальную реальность для захвата мира. Поэтому надо изучать компьютерную графику, чтобы не дать себя провести.
•Цифровые фотографии и видео. Цифровое видео и фотографии применяются с каждым годом всё более и более широко. При этом возникают очень важные задачи по их обработке, сжатию и
передачи с помощью различных информационных носителей и сетей (Интернет, спутниковые и телевизионные сети).
Приведенная классификация сфер применения компьютерной графики является во многом условной. Возможно, найдутся задачи, которые нельзя отнести ни к одному из обозначенных направлений.
3.2Основные понятия и определения
3.2.1Графический формат
Графическим форматом называют способ представления графических данных (изображений). Графические данные обычно разделяются на два класса: векторные и растровые.
Векторные данные представляют изображение как набор объектов геометрических примитивов. Обычно в качестве них выбираются точки, прямые, окружности, прямоугольники, текст, а также как общий случай, сплайны некоторого порядка. Объектам присваиваются некоторые атрибуты, например, толщина линий, цвет заполнения. Рисунок хранится как набор координат, векторов, коэффициентов и других чисел, характеризующих набор примитивов. При воспроизведении перекрывающихся объектов имеет значение их порядок.
58
Изображение в векторном формате даёт простор для редактирования. Изображение может без потерь масштабироваться, поворачиваться, деформироваться. Дело в том, что каждое такое преобразование фактически выполняется так: старое изображение (или фрагмент) стирается, и вместо него строится новое, модифицированное. Все остальные фрагменты остаются не тронутыми. Математическое описание векторного рисунка остаётся прежним, изменяются только значения некоторых переменных, например, коэффициентов. Эти преимущества обычно очень активно используется в различных САПР системах.
Пример векторного изображения приведен на рис. 1.
Рис. 1. Векторный рисунок
Векторное представление уже рассматривалось при изучении дисциплины «компьютерная графика» (представление плоских и объемных геометрических объектов, перспективные и координатные преобразования, различные алгоритмы и методы), поэтому при изучении данной дисциплины будет уделено большее внимание работе с растровыми данными.
59
Растровые графические данные представляются двумерным массивом (матрицей) пикселов. Пикселами (или пикселями — от английского pixel, сокращение от PICture'S ELement, элемент изображения, точка) называются неделимые элементы, из которых формируется растровое изображение. Каждому пикселу сопоставляется значение — яркости, цвета, прозрачности, или комбинация этих значений.
Без особых потерь растровые изображения можно только лишь уменьшать, хотя некоторые детали изображения тогда исчезнут навсегда, что не происходит в векторном представлении. Увеличение же растровых изображений влечёт живописные увеличенные квадраты того или иного цвета, которые раньше были пикселами. Это так называемые артефакты - возникновение всякого рода побочных эффектов при воздействии на изображение (муар, вторичные контуры, блочность).
Пример растрового изображения приведен на рис. 2.
Рис. 2. Растровый рисунок
60
Источниками растровых данных могут быть программы, формирующие изображение на растровом экране и различного рода устройства для ввода изображений (сканеры, цифровые фотокамеры и др.).
В растровом виде представимо любое изображение, однако этот способ хранения имеет свои недостатки: потери качества при редактировании, большой объём памяти, необходимый для работы с изображениями. Наиболее распространенные растровые форматы: BMP, TIFF, GIF, PCX, JPEG. В процессе изучения данной дисциплины мы подробно рассмотрим BMP формат.
Типы форматов графических файлов определяются способом хранения и типом графических данных. Наиболее широко используются растровый, векторный и метафайловый форматы.
Метафайловый формат позволяет хранить в одном файле и векторные, и растровые данные.
Кроме того, существуют файловые форматы для хранения мультипликации (видеоинформации), мультимедиа-форматы (одновременно хранят звуковую, видео и графическую информацию), гипертекстовые (позволяют хранить не только текст, но и связи-переходы внутри него) и гипермедиа (гипертекст плюс графическая и видеоинформация) форматы, форматы шрифтов и т. д.
3.2.2 Пикселы и цвет
Различают физические и логические пикселы.
Физические пикселы — реальные точки, отображаемые на устройстве вывода — наименьшие элементы на поверхности отображения, которыми можно манипулировать. При выводе на экран или принтер один физический пиксел обычно формируется из нескольких более мелких цветных точек (dot). Например, один цветной пиксел на мониторе формируется из трех более мелких точек красного, зеленого и синего цветов, яркость которых и