СОДЕРЖАНИЕ
Сейчас трёхмерные изображения можно увидеть везде, начиная от компьютерных игр и заканчивая системами моделирования в реальном времени. Раньше, когда трёхмерная графика существовала только на суперкомпьютерах, не существовало единого стандарта в области графики. Все программы писались с "нуля" или с использованием накопленного опыта, но в каждой программе реализовывались свои методы для отображения графической информации. С приходом мощных процессоров и графических ускорителей трёхмерная графика стала реальностью для персональных компьютеров. Но в тоже время производители программного обеспечения столкнулись с серьёзной проблемой - это отсутствие каких-либо стандартов, которые позволяли писать программы, независимые от оборудования и операционной системы. Одним из первых таких стандартов, существующий и по сей день, является OpenGL [1].- это графический стандарт в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире. Ещё в 1982 г. в Стенфордском университете была разработана концепция графической машины, на основе которой фирма Silicon Graphics в своей рабочей станции Silicon IRIS реализовала конвейер рендеринга. На основе библиотеки IRIS GL, в 1992 году был разработан и утверждён графический стандарт OpenGL. Создатели OpenGL - это крупнейшие фирмы выпускающие как оборудование, так и программное обеспечение: Silicon Graphics, Inc., Microsoft, IBM Corporation, Sun Microsystems, Inc., Digital Equipment Corporation (DEC), Evans & Sutherland, Hewlett-Packard Corporation, Intel Corporation и Intergraph Corporation.
Каждый, кто хоть раз использовал возможности библиотеки OpenGL, мог увидеть, что создание объектов, а именно, указание их геометрических параметров (координат) является сложной задачей. Как вы можете догадаться, это явление имеет место вследствие отсутствия наглядности - указывать геометрию моделей приходится интуитивно, либо по заранее рассчитанным зависимостям.
Как же решить эту проблему? Первое, что приходит в голову - для создания модели использовать сторонние приложения. Именно так сейчас и поступают в современных проектах, например играх. Как минимум, такое приложение должно иметь графический интерфейс и уметь сохранять результат в удобном для чтения формате. Это могут быть любые пакеты для создания и редактирования трехмерной компьютерной графики, CAD системы.
И так с учетом всего сказанного, становится очевидным применение автоматизации генерации приложений, использующих библиотеку OpenGL. Целью этой автоматизации будет разработка приложения выполняющего следующие функции:
) преобразование подающихся на вход графических файлов 3D моделей в универсальный файл (файл с описанием модели, в формате, удобном для использования в приложениях ориентированных на применение библиотеки OpenGL);
) генерация минимального приложения (шаблона), использующего возможности OpenGL, с подключенной к нему библиотекой, предоставляющей простой интерфейс по манипуляции с универсальным файлом (получение информации о файле, загрузка в память и т.д.).
Полученный шаблон можно будет использовать как фундамент для разнообразных графических приложений.
Наличие библиотеки подключенной к шаблону не случайно, т.к. это предоставляет возможность использовать универсальный файл с другими приложениями.
Данная выпускная работа состоит из трех частей:
) основная часть;
) экономическая часть;
) вопросы безопасности жизнедеятельности.
В основной части выпускной работы содержатся такие разделы:
) предпроектные исследования;
) анализ задачи;
) разработка алгоритмов решения задачи;
) синтез программного обеспечения;
) тестирование системы.
В разделе «Предпроектные исследования» формируются задачи выпускной работы. Описывается суть самой задачи, предполагаемой к автоматизации. Обосновывается выбор инструментальных средств, которые будут использованы для разработки программного приложения. Обосновывается выбор технического обеспечения, необходимого для развертывания создаваемой системы. А также описываются прототипы систем.
В разделе «Анализ задачи» формулируется задача системы в наиболее общем виде и осуществляется ее последовательная детализация. Описывается состав уровней детализации, набор предполагаемых операндов и результатов для каждой составляющей уровня. Производится проверка корректности назначения составляющих для каждого уровня.
В разделе «Разработка алгоритмов решения задачи» приводятся алгоритмы реализации набора подзадач, выявленных в ходе анализа. Для описания алгоритмов используется любой удобный способ: формульный, с помощью блок схем, лингвистический. Уточняется набор операндов и результатов для разработанной системы алгоритмов.
В разделе «Синтез программного обеспечения» описывается состав программного обеспечения и определяется характер взаимосвязи программных единиц. Описываются информационные потоки, между основными компонентами программного обеспечения. Обосновывается выбранная структура интерфейса, и описываются его элементы и технология применения.
В разделе «Тестирование» описываются примеры, подтверждающие работоспособность созданного программного обеспечения.
В экономической части выпускной работы, содержание и структура раздела уточняется консультантом работы по экономической части.
В разделе охраны труда, содержание и структура раздела уточняется консультантом работы по вопросам обеспечения жизнедеятельности.
1. Предпроектные исследования
.1 Описание предметной области задачи
автоматизации
Компьютерная графика нашла широкое распространение и применение в повседневной жизни. Учёные используют компьютерную графику для анализа результатов моделирования. Инженеры и архитекторы используют трёхмерную графику для создания виртуальных моделей. Кинематографисты создают спецэффекты или полностью анимированные фильмы («Шрек», «История игрушек» и др.). В последние годы широкое распространение получили также компьютерные игры, максимально использующие трёхмерную графику для создания виртуальных миров.
Компьютерная графика сейчас стала основным средством связи между человеком и компьютером, постоянно расширяющим сферы своего применения, т.к. в графическом виде результаты становятся более наглядными и понятными.
Распространению компьютерной графики сопутствовали свои трудности. В 1990-х разработка программного продукта, способного работать на большом количестве графического оборудования, была сопряжена с большими временными и финансовыми затратами. Было необходимо отдельно создавать модули для каждого типа графических адаптеров, что порой приводило к размножению одинакового программного кода. Это сильно тормозило развитие и распространение компьютерной графики.
Поэтому было принято решение стандартизировать метод доступа к графической аппаратуре на уровне программного интерфейса.
Таким образом, появился программный интерфейс OpenGL, который стандартизирует доступ к графической аппаратуре путём смещения ответственности за создание аппаратного драйвера на производителя графического устройства. Это позволило разработчикам программного обеспечения использовать более высокий уровень абстракции от графического оборудования, что значительно ускорило создание новых программных продуктов и снизило на них затраты.переводится как «Открытая Графическая Библиотека» (Open Graphics Library), это означает, что OpenGL - это открытый и мобильный стандарт. Программы, написанные с помощью OpenGL можно переносить практически на любые платформы, получая при этом одинаковый результат, будь это графическая станция или суперкомпьютер. OpenGL освобождает программиста от написания программ для конкретного оборудования. Если устройство поддерживает какую-то функцию, то эта функция выполняется аппаратно, если нет, то библиотека выполняет её программно.
Что же представляет из себя OpenGL? С точки зрения программиста OpenGL - это программный интерфейс для графических устройств, таких как графические ускорители. Он включает в себя около 150 различных команд, с помощью которых программист может определять различные объекты и производить рендеринг. Говоря более простым языком, вы определяете объекты, задаёте их местоположение в трёхмерном пространстве, определяете другие параметры (поворот, масштаб, ...), задаёте свойства объектов (цвет, текстура, материал, ...), положение наблюдателя, а библиотека OpenGL позаботится о том, чтобы отобразить всё это на экране. Поэтому можно сказать, что библиотека OpenGL является только воспроизводящей (Rendering), и занимается только отображением 3D объектов.
На данный момент OpenGL - одна из наиболее популярных графических библиотек, предоставляющих возможность реализовывать сложные задачи с 3D объектами у себя в программе. Ее главным конкурентом является DirectX [2] - коммерческий проект, изначально нацеленный на разработку видеоигр. Благодаря правильной рекламной компании от Microsoft и тому, что платформа Windows на данный момент является самой распространенной, DirectX завоевал большую популярность. Новые версии этой библиотеки используют самые передовые достижения в графической индустрии. Множество производителей видеокарт аппаратно поддерживают ее спецификацию. Но, не смотря на все эти преимущества, OpenGL имеет один главный плюс - открытость и кроссплатформенность. Благодаря этому OpenGL независим от языка программирования и используется на многих платформах, а также во многих тяжелых приложениях, таких как САПР системы. Разработка OpenGL не прекращается и на данный момент ее последняя версия (4.2) ничем не уступает по возможностям DirectX 11.
К преимуществам OpenGL можно отнести:
) производительность - с самого начала в OpenGL была заложена "крайне желательная" возможность отрисовки динамических сцен;
) ортогональность - по возможности все функции OpenGL являются ортогональными, то есть независимыми;
) полнота - насколько это представляется возможным, OpenGL соответствует набору функций, предоставляемому современными аппаратными средствами графической акселерации;
) интероперабельность - в сетевом окружении важно передавать данные между разными платформами;
) расширяемость - поскольку OpenGL рассчитан на максимальное соответствие возможностям аппаратуры (а аппаратура, как известно, имеет тенденцию развиваться), то в OpenGL также встроены механизмы включения новых функций.
Помимо статической геометрии, т.е. набора многоугольников, задающих стены, пол, лестницы и т.п., часто возникает необходимость работы с целыми группами граней, объединенных в один объект. Таким объектом может быть ваза с цветами на столе (как, впрочем, и сам стол), оружие, противники и т.п. Во всех этих случаях возникает необходимость в объектах, представленных набором большого числа граней (обычно треугольников).
При этом удобно иметь обычный набор вершин, цветов и текстурных координат, а также считать, что векторы нормали задаются в вершинах, а не на гранях.
Использование объектов, заданных таким образом, также удобно и тем, что OpenGL поддерживает так называемые вершинные массивы (vertex array), позволяющие не передавать по очереди все значения для каждой из вершин, а просто указать ссылки на массивы значений, из которых следует взять соответствующие значения. Подобный подход, позволяющий всего за несколько вызовов построить сложный объект, состоящий из сотен и даже тысяч граней, очень удобен и дает большое преимущество в скорости по сравнению с передачей каждого значения отдельным вызовом OpenGL.
Таким образом, каждый такой объект (их часто называют моделями), содержит в себе массив вершин, цветов, текстурных координат и векторов нормали. Также подобный объект может содержать в себе ссылку на используемую текстуру, ограничивающее тело и описание граней. Обычно считается, что каждая грань является треугольником, задаваемым тремя индексами в массив вершин.
Такие модели рационально хранить в отдельных файлах и по мере необходимости загружать их в память. Как уже было сказано, модель состоит из множества параметров - вершин, граней, цветов и т.д., а значит, данный файл будет иметь сложную структуру. Очевидно, что заполнить этот файл вручную будет очень сложно и неоправданно долго, а в случае, когда модель представляет собой сложный объект почти невозможно.
Для решения этой проблемы разработаны и повсеместно применяются графические редакторы. Это могут быть как двухмерные (растровые или векторные редакторы), так и трехмерные системы для создания и редактирования графики, анимации, моделирования, рендеринга.
Обычно файлы, созданные графическими редакторами и содержащие модели объектов, имеют схожую структуру. Конечно, каждый редактор дополняет исходный файл своими, присущими только ему, параметрами, например настройки оболочки, функционала и др., но часть, касающаяся модели, почти не отличается.
Основными данными, описывающими 3D модель, являются:
) список вершин;
) список граней (треугольники, четырехугольники);
) список нормалей;
) материалы граней;
) текстурные координаты;
) другие специфические каждому редактору блоки.
1.2 Анализ прототипов системы
Данный программный продукт имеет специфическое назначение, т.к. подобные задачи решались уже неоднократно, но их реализация, как правило, являются частью какой-то проприетарной системы и недоступна. Или же имеются открытые варианты реализаций, но они решают немного другие задачи.
Основной задачей проекта является автоматизация генерации приложений, использующих библиотеку OpenGL. Автоматизация включает разработку приложения выполняющего преобразование полученного на вход файла, описывающего модель или любой набор объектов, в универсальный файл с описанием модели, но в формате удобном для его использования в OpenGL. Также по требованию пользователя будет генерироваться шаблон, представляющий собой базовый набор кода для создания какого-либо графического приложения. К этому шаблону будет поставляться библиотека необходимая для предоставления возможностей по простой манипуляции с полученным универсальным файлом (загрузка, чтение внутренних данных и т.п.).