Работа с графикой средствами OpenGL в С#

 

Министерство Образования Российской Федерации

Тюменский Государственный Университет

Институт Математики Естественных Наук и

Информационных Технологий

Кафедра Программного Обеспечения






Курсовая работа

По дисциплине

Объектно-ориентированное программирование

На тему

Работа с графикой средствами OpenGL в С#




Выполнил:

студент Прикладной информатики.

Садыков Роман Валерьевич

Проверил:

доцент кафедры

Программного обеспечения

Ступников Андрей Анатольевич




Ноябрьск 2013

Оглавление


1. Что такое OpenGL

2. Direct3D vs. OpenGL

3. Спецификация

4. Архитектура

5. Расширения

6. Дополнительные библиотеки

7. Независимость от языка программирования

8. История версий

9. Практический пример

10. Создание проекта и подключение библиотеки Tao OpenGL в С#.

11. Инициализация OpenGL в C# .NET .

Список литературы

1. Что такое OpenGL


В данной курсовой работе мы должны рассмотреть основы работы с графиков средствами OpenGL в C#, что из себя представляет OpenGL, основные спецификации, принципы, возможности и закрепить примером.

OpenGL (Open Graphics Library - открытая графическая библиотека, графическое API) - спецификация, определяющая независимый от языка программирования платформонезависимый программный интерфейс для написания приложений, использующих двухмерную и трёхмерную компьютерную графику.

Включает более 250 функций для рисования сложных трёхмерных сцен из простых примитивов. Используется при создании компьютерных игр, САПР, виртуальной реальности, визуализации в научных исследованиях. На платформе Windows конкурирует с Direct3D, также известным как DirectX.


2. Direct3D vs. OpenGL


На сегодняшний день, широко используются только два API, Direct3D и OpenGL. Расскажу понемногу о каждом.

Всем известна одна из многих привычек корпорации Microsoft, производителя Direct3D: ищем перспективные проекты и скупаем не очень знаменитую компанию, обладающую правами на это продукт. Да, так произошло и с Direct3D. Когда-то компания Rendermorphics начала разработку нового API, а вездесущая Microsoft как раз в этот момент думала, чтобы сделать такое, чтобы не зависеть от совета OpenGL ARB (определение ARB будет дано чуть ниже), так как по сути OpenGL не принадлежала Microsoft полностью, а она без сомнений любит контролировать всё, что может. Вот и решила Microsoft скупить все разработки прообраза современного Direct3D, и, сделать его своими силами. Так на свет появился Direct3D.D - это некая самостоятельная часть библиотеки Microsoft, DirectX (в основном предназначенной для создания игровых приложений), которая отвечает за графику и вывод графической информации.D не имеет никаких расширений (в отличие от OpenGL): все новые возможности и средства появляются с выходом новой версии или нового обновления. Интерфейс для работы с Direct3D построен по технологии COM (Component Object Model).

Другим популярным средством для вывода трёхмерной графики является OpenGL. Основным разработчиком OpenGL является компания SGI (раньше Silicon Graphics).

Когда-то давным-давно существовал 3D API под названием IRIS GL. Как показала практика, этот API был качественным и удобным. Стоит заметить, что IRIS GL использовался в мощных графических станциях Silicon Graphics. Но время делает своё дело - IRIS GL канул в лету.

На основе IRIS GL, SGI и ещё несколько компаний (Microsoft, IBM, Intel, DEC) создали новый 3D API, под названием OpenGL. Он задумывался как многоплатформенное, универсальное средство для вывода трёхмерной графики. Он имеет множество расширений и надстроек, варьирующихся в зависимости от типа графической системы. Для контроля и развития OpenGL, был создан специальный совет компаний, ARB - Architecture Review Board. Его можно считать контролирующим органом OpenGL.

Одно из преимуществ OpenGL состоит в том, что он является бесплатным для использования продуктом, с полным открытым исходным кодом. Кроме того, OpenGL можно использовать с тем языком, который является ближе всего к вам: C, C++, C#, Java, Delphi, Visual Basic и другие.

Читатель спросит, а нельзя ли было создать какой-нибудь универсальный API, воссоединяющий в себе все преимущества ныне существующих? Для того чтобы разработчикам видеокарт, игр и драйверов не писать поддержку и Direct3D, и OpenGL одновременно. Такая попытка была. Новоиспеченный совет крупных компаний (кстати, весьма сильно походивший на OpenGL ARB) пытался создать универсальный 3D API под названием Fahrenheit, но как всегда пошло что-то не так, как планировалось изначально. Никакая компания не захотела делиться с другими компаниями всеми своими наработками и авторскими правами просто так. Свою роль сыграли ещё несколько других факторов (например, произойдёт отсутствие конкуренции между средствами для вывода трёхмерной графики).


2. Спецификация


На базовом уровне, OpenGL - это просто спецификация, то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации - библиотеки функций, соответствующих набору функций спецификации. Реализация использует возможности оборудования там, где это возможно. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители должны пройти специфические тесты (conformance tests - тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL-реализация. Таким образом, разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, оставив эффективную реализацию последних разработчикам аппаратного обеспечения.

Эффективные реализации OpenGL существуют для Windows, Unix-платформ, PlayStation 3 и Mac OS. Эти реализации обычно предоставляются изготовителями видеоадаптеров и активно используют возможности последних. Существуют также открытые реализации спецификации OpenGL, одной из которых является библиотека Mesa. Из лицензионных соображений Mesa является «неофициальной» реализацией OpenGL, хотя полностью с ней совместима на уровне кода и поддерживает как программную эмуляцию, так и аппаратное ускорение при наличии соответствующих драйверов.

Спецификация OpenGL пересматривается консорциумом ARB (Architecture Review Board), который был сформирован в 1992 году. Консорциум состоит из компаний, заинтересованных в создании широко распространённого и доступного API. Согласно официальному сайту OpenGL, членами ARB с решающим голосом на ноябрь 2004 года являются производители профессиональных графических аппаратных средств SGI, 3Dlabs, Matrox и Evans & Sutherland (военные приложения), производители потребительских графических аппаратных средствATI и NVIDIA, производитель процессоров Intel, и изготовители компьютеров и компьютерного оборудования IBM, Apple, Dell, Hewlett-Packard и Sun Microsystems, а также один из лидеров компьютерной игровой индустрии id Software. Microsoft, один из основоположников консорциума, покинула его в марте 2003 года. Помимо постоянных членов, каждый год приглашается большое количество других компаний, становящихся частью OpenGL ARB в течение одного года. Такое большое число компаний, вовлеченных в разнообразный круг интересов, позволило OpenGL стать прикладным интерфейсом широкого назначения с большим количеством возможностей.

Курт Экли (Kurt Akeley) и Марк Сигал (Mark Segal) являются авторами оригинальной спецификации OpenGL. Крис Фрэзиер (Chris Frazier) редактировал версию 1.1. Йон Лич (Jon Leech) редактировал версии с 1.2 по версию 2.0.


4. Архитектура


OpenGL ориентируется на следующие две задачи:

·Скрыть сложности адаптации различных 3D-ускорителей, предоставляя разработчику единый API.

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

Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и многоугольников с последующей математической обработкой полученных данных и построением растровой картинки на экране и/или в памяти. Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который по сути представляет собой дискретный автомат. Абсолютное большинство команд OpenGL попадают в одну из двух групп: либо они добавляют графические примитивы на вход в конвейер, либо конфигурируют конвейер на различное исполнение трансформаций.является низкоуровневым процедурным API, что вынуждает программиста диктовать точную последовательность шагов, чтобы построить результирующую растровую графику (императивный подход). Это является основным отличием от дескрипторных подходов, когда вся сцена передается в виде структуры данных (чаще всего дерева), которое обрабатывается и строится на экране. С одной стороны, императивный подход требует от программиста глубокого знания законов трёхмерной графики и математических моделей, с другой стороны - даёт свободу внедрения различных инноваций.


5. Расширения


Стандарт OpenGL, с появлением новых технологий, позволяет отдельным производителям добавлять в библиотеку функциональность через механизм расширений. Расширения распространяются с помощью двух составляющих: заголовочный файл, в котором находятся прототипы новых функций и констант, а также драйвер устройства, поставляемого разработчиком. Каждый производитель имеет аббревиатуру, которая используется при именовании его новых функций и констант. Например, компания NVIDIA имеет аббревиатуру NV, которая используется при именовании её новых функций, как, например, glCombinerParameterfvNV(), а также констант, GL_NORMAL_MAP_NV. Может случиться так, что определённое расширение могут реализовать несколько производителей. В этом случае используется аббревиатура EXT, например, glDeleteRenderbuffersEXT. В случае же, когда расширение одобряется консорциумом ARB, оно приобретает аббревиатуру ARB и становится стандартным расширением. Обычно расширения, одобренные консорциумом, включаются в одну из следующих спецификаций OpenGL.

Список зарегистрированных расширений можно найти в официальной базе расширений.


6. Дополнительные библиотеки


Существует ряд библиотек, созданных поверх или в дополнение к OpenGL. Например, библиотека GLU, являющаяся практически стандартным дополнением OpenGL и всегда её сопровождающая, построена поверх последней, то есть использует её функции для реализации своих возможностей. Другие библиотеки, как, например, GLUT и SDL, созданы для реализации возможностей, недоступных в OpenGL. К таким возможностям относятся создание интерфейса пользователя (окна, кнопки, меню и др.), настройка контекста рисования (область рисования, использующаяся OpenGL), обработка сообщений от устройств ввода/вывода (клавиатура, мышь и др.), а также работа с файлами. Обычно, каждый оконный менеджер имеет собственную библиотеку-расширение для реализации вышеописанных возможностей, например, WGL в Windows или GLX в X Window System, однако библиотеки GLUT и SDL являются кросс-платформенными, что облегчает перенос написанных приложений на другие платформы.

Библиотеки GLEW (The OpenGL Extension Wrangler Library) и GLEE (The OpenGL Easy Extension library) созданы для облегчения работы с расширениями и различными версиями OpenGL. Это особенно актуально для программистов в Windows, так как заголовочные и библиотечные файлы, поставляемые с Visual Studio, находятся на уровне версии OpenGL 1.1.имеет только набор геометрических примитивов (точки, линии, многоугольники) из которых создаются все трёхмерные объекты. Порой подобный уровень детализации не всегда удобен при создании сцен. Поэтому поверх OpenGL были созданы более высокоуровневые библиотеки, такие как Open Inventor и VTK. Данные библиотеки позволяют оперировать более сложными трёхмерными объектами, что облегчает и ускоряет создание трёхмерной сцены. графический информация программирование directx(OpenGL Mathematics) - вспомогательная библиотека, предоставляющая программистам на C++ классы и функции для выполнения математических операций. Библиотека может использоваться при создании 3D-программ с использованием OpenGL. Одной из характеристик GLM является то, что реализация основана на спецификации GLSL. Исходный код GLM использует лицензию MIT.


7. Независимость от языка программирования


Для подтверждения независимости от языка программирования были разработаны различные варианты привязки (binding) функций OpenGL или полностью перенесены на другие языки. Одним из примеров может служить библиотека Java 3D, которая может использовать аппаратное ускорение OpenGL. Прямая привязка функций реализована в Lightweight Java Game Library, которая имеет прямую привязку OpenGL для Java. Sun также выпустила версию Java OpenGL (JOGL), которая предоставляет прямую привязку к Си-функциям OpenGL, в отличие от Java 3D, которая не имеет столь низкоуровневой поддержки. Официальный сайт OpenGL имеет ссылки на привязки для языков Java, Фортран 90, Perl, Pike, Python, Ada, Visual Basic и Pascal. Имеются также варианты привязки OpenGL для языков C++ и C#.


8. История версий


Компьютерная графика нашла широкое распространение и применение в повседневной жизни. Учёные используют компьютерную графику для анализа результатов моделирования. Инженеры и архитекторы используют трёхмерную графику для создания виртуальных моделей. Кинематографисты создают спецэффекты или полностью анимированные фильмы («Шрек», «История игрушек» и др.). В последние годы широкое распространение получили также компьютерные игры, максимально использующие трёхмерную графику для создания виртуальных миров.

Распространению компьютерной графики сопутствовали свои трудности. В 1990-х разработка программного продукта, способного работать на большом количестве графического оборудования, была сопряжена с большими временны?ми и финансовыми затратами. Было необходимо отдельно создавать модули для каждого типа графических адаптеров, что порой приводило к размножению одинакового программного кода. Это сильно тормозило развитие и распространение компьютерной графики.Graphics (SGI) специализировалась на создании высокотехнологического графического оборудования и программных средств. Являясь в то время лидером в трёхмерной графике, SGI видела проблемы и барьеры в росте рынка. Поэтому было принято решение стандартизировать метод доступа к графической аппаратуре на уровне программного интерфейса.

Таким образом появился программный интерфейс OpenGL, который стандартизирует доступ к графической аппаратуре путём смещения ответственности за создание аппаратного драйвера на производителя графического устройства. Это позволило разработчикам программного обеспечения использовать более высокий уровень абстракции от графического оборудования, что значительно ускорило создание новых программных продуктов и снизило на них затраты.

В 1992 году компания SGI возглавила OpenGL ARB - группу компаний по разработке спецификации OpenGL. OpenGL эволюционировал из 3D-интерфейса SGI - IRIS GL. Одним из ограничений IRIS GL было то, что он позволял использовать только возможности, поддерживаемые оборудованием; если возможность не была реализована аппаратно, приложение не могло её использовать. OpenGL преодолевает эту проблему за счёт программной реализации возможностей, не предоставляемых аппаратно, что позволяет приложениям использовать этот интерфейс на относительно маломощных системах.

В 1995 году была выпущена библиотека Direct3D от Microsoft. Вскоре Microsoft, SGI и Hewlett-Packard начали проект под названием Fahrenheit, который предусматривал создание более универсального программного интерфейса на основе Direct3D и OpenGL. Идея казалась достаточно обещающей, призванной навести порядок в области интерактивной трёхмерной графики, однако, в результате финансовых трудностей в SGI и отсутствия должной индустриальной поддержки, проект был закрыт.

OpenGL 2.0

В сентябре 2001 года 3DLabs раскрыла свое видение OpenGL 2.0.

Говорили, что по сравнению с DirectX главной проблемой OpenGL является консорциум (который и должен заниматься развитием OpenGL), в который входит большое количество компаний с различными интересами, что приводит к длительному периоду принятия новой версии спецификации. OpenGL версии 2.0 была представлена 3Dlabs в ответ на беспокойство относительно медленного и нечёткого направления развития OpenGL. 3Dlabs предложила ряд существенных дополнений к стандарту, наиболее значимым из которого было добавление к ядру OpenGL языка обработки полутонов GLSL (OpenGL Shading Language). Это позволяет программисту заменить фиксированный конвейер OpenGL небольшими программами на специальном языке для создания различных эффектов, таких, как bump mapping, normal mapping, parallax mapping, HDR и т. д.

Однако ещё до введения в стандарт OpenGL языка GLSL существовала возможность разрабатывать спецэффекты на языках ассемблера (расширения vertex_program, fragment_program) и Cg <#"justify">OpenGL 3.0

11 августа 2008 года Khronos Group представила новую версию спецификации OpenGL

Поддерживают видеокарты: Radeon серии HD; GeForce 8, 9, GTX 100, GTX 200, GTX 300 и GTX 400 серий.

OpenGL 3.1

24 марта 2009 года Khronos Group анонсировала OpenGL 3.1. В новой версии произведена чистка компонентов, которые были объявлены устаревшими, но оставались в OpenGL 3.0 для сглаживания перехода на новую версию API (устаревшие компоненты возможно в дальнейшем использовать через расширение GL_ARB_compatibility).

OpenGL 3.2

3 августа 2009 года Khronos Group анонсировала OpenGL 3.2. Новая версия продолжает развитие стандарта OpenGL, чтобы дать разработчикам графики кроссплатформенный доступ к передовой функциональности GPU.

Поддерживают видеокарты: Radeon серии HD; GeForce 8000, 9000, GTX серий 200 и 400.

Нововведения:

·Поддержка OpenGL Shading Language версии 1.50 (GLSL).

·Порядок вершинных компонентов BGRA (GL_ARB_vertex_array_bgra) - теперь в шейдере можно читать 4-компонентные вершинные атрибуты в формате RGBA.

·Команды отрисовки теперь позволяют модификацию базового индекса вершины (GL_ARB_draw_elements_base_vertex) - теперь легко можно использовать один набор вершинных буферов (для координат и прочих атрибутов) для хранения множества мешей (меньше переключений буферов - быстрее рендеринг).

·Геометрические шейдеры (GL_ARB_geometry_shader4).

OpenGL 3.3

Представлена вместе с OpenGL 4.0 11 марта 2010 года. Позволяет максимально возможно приблизиться к функциональности OpenGL 4.0 на аппаратной базе предыдущего поколения.

OpenGL 4.0

11 марта 2010 года Khronos Group представила финальный вариант спецификации OpenGL 4.0 и языка шейдеров GLSL 4.0. OpenGL 4.0 полностью обратно совместим со старыми расширениями OpenGL, используя режим совместимости введенный в OpenGL 3.2

Среди нововведений:

·Две новые ступени обработки шейдеров, что позволяет перенести обработку тесселяции с центрального процессора на GPU.

·Прорисовка данных, сгенерированных OpenGL или такими внешними API, как OpenCL, без участия центрального процессора.

·64-битная двойная точность с плавающей запятой операций с шейдерами и ввода-вывода для увеличения точности и качества рендеринга.

OpenGL 4.1

26 июля 2010 года, Khronos Group анонсировала спецификацию OpenGL 4.1. Спецификация включает в себя обновление GLSL (GL Shading language) до версии 4.10.

Нововведения:

·Полная совместимость с OpenGL ES 2.0 API.

·Возможность опрашивать и загружать бинарные данные для объектов шейдерных программ.

·64-битные компоненты с плавающей точкой для вершинных шейдеров (повышается геометрическая точность).

Новые расширения:

·Sync-объекты OpenGL, связанные с event-объектами OpenCL.

·Возможность установить значения в буфере трафарета (stencil) во фрагментном шейдере.

·Некоторые особенности для улучшения надёжности, например, при запуске WebGL-приложений.

·Механизмы обратной связи для получения ошибок и предупреждений.

OpenGL 4.2

8 августа 2011 года Khronos Group опубликовала спецификацию OpenGL 4.2 и языка шейдеров GLSL 4.2

Нововведения:

·Поддержка изменения произвольной части сжатой текстуры, без повторной загрузки в GPU текстуры целиком.

·Поддержка упаковки нескольких 8- и 16-разрядных значений в одно 32-разрядное значение для эффективной обработки шейдеров cо значительным сокращением используемого объёма памяти и повышением пропускной способности.

OpenGL 4.3

6 августа 2012 года Khronos Group опубликовала на SIGGRAPH 2012 спецификации OpenGL 4.3. Кроме новых возможностей, OpenGL 4.3 приносит поддержку нового типа шейдеров через расширение GL_ARB_compute_shader. Новая версия обратно совместима с предыдущими.


9. Практический пример


Tao Framework

Tao Framework - это свободно-распространяемая библиотека, с открытым исходным кодом, предназначенная для быстрой и удобной разработки кросс-платформенного мультимедийного программного обеспечения в среде .NET Framewrok и Mono. На сегодняшний день, Tao Framework - это лучший путь для использования библиотеки OpenGL при разработке в среде .NET на языке C#.

В состав библиотеки на данный момент входят все современные средства, которые могут понадобиться в ходе разработки мультимедиа программного обеспечения: реализация библиотеки OpenGL, реализация библиотеки FreeGlut, содержащей все самые новые функции этой библиотеки, библиотека DevIL (легшая в основу стандарта OpenIL - Open Image Library), и многие другие.

Самые интересные библиотеки, включенные в Tao Framework:

·OpenGL 2.1.0.12 - свободно распространяемый аппаратно-программный интерфейс для визуализации 2D и 3D графики.

·FreeGLUT 2.4.0.2 - библиотека с открытым исходным кодом, являющаяся альтернативой библиотеке GLUT (OpenGL Utility Toolkit).

·DevIL 1.6.8.3 (она же OpenIL) - кроссплатформенная библиотека, реализующая программный интерфейс для работы с изображениями. На данный момент библиотека поддерживает работу с изображениями 43-х форматов для чтения и17-ти форматов для записи.

·Cg 2.0.0.0 - язык высокого уровня, созданный для программирования текстурных и вершинных шейдеров.OpenAL 1.1.0.1 - свободно распространяемый аппаратно-программный интерфейс для обработки аудиоданных. (В том числе 3D звука и EAX эффектов).

·PhysFS 1.0.1.2 - библиотека для работы с вводом / выводом файловой системы, а так же различного вида архивами, на основе собственного API.

·SDL 1.2.13.0 - кроссплатформенная мультимедийная библиотека, активно использующаяся для написания мультимедийных приложений в операционной системе

·GNU/Linux ODE 0.9.0.0 - свободно распространяемый физический программный интерфейс, главной особенностью которого является реализация системы динамики абсолютно твёрдого тела и система обнаружения столкновений.

·FreeType 2.3.5.0 - библиотека реализующая растеризацию шрифтов. Данная библиотека используется в X11(оконной системе, которая обеспечивает все стандартные инструменты и протоколы для построения GUI (графического интерфейса пользователя) в UNIX подобных операционных системах).

·FFmpeg 0.4.9.0 - набор свободно-распространяемых библиотек с открытым исходным кодом. Данные мультимедийные библиотеки позволяют работать аудио и видео данными в различных форматах.

Как видите, библиотека Tao Framework является мощным свободно-распространяемым инструментом, для решения любых мультимедийных задач, преимущественно кросс-платформенного характера.

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

Преимущества компонентов, выбранных нами для изучения программирования компьютерной графики становятся очевидными: язык C# является на данный момент одним из самых современных и удобных для быстрой разработки языков программирования, а с учетом того, что он вобрал все лучшее от существующих языков программирования, а так же учел все их недостатки - делает его самым перспективным в плане изучения.

Среда .NET Framework является крайне дружелюбной для программиста - она невероятно удобна.

Установка Tao Framework

Для начала нужно скачать сам Tao Framework.

После скачивания просто устанавливаем по стандартному пути. Требуется .Net Framework, но так как мы используем Visual Studio, то проблем не должно возникнуть, ведь VS содержит .Net Framework. В моём случае Visual Studio 2012 уже включает в себя .Net Framework версии 4.5, а нам хватит и версии 2.0, так что обладатели и старых пакетов Visual Studio могут не беспокоиться.

Инициализация Tao OpenGL + реализация тестового примера

Выполняем дополнительные действия:

Скопируйте файлы из директории C:\Programm Files\TaoFramework\lib

В папку C:\Windows\System32

Итак, сейчас мы на основе тестового приложения, проверим работоспособность библиотеки Tao: сначала мы подключим ее к проекту, затем проведем инициализацию библиотеки и инициализацию OpenGL и в качестве проверки визуализируем сферу с помощью библиотеки FreeGlut.


10. Создание проекта и подключение библиотеки Tao OpenGL в С#


Сначала создайте новый проект, в качестве шаблона установив приложение Windows Forms.

Дождитесь пока MS Visual Studio закончит генерацию кода шаблона. Теперь перейдите к окну Solution Explorer (Обозреватель решений). Здесь, нас интересует узел Links, который отображает связи с библиотеками, необходимыми для работы нашего приложения (рисунок 1)

Рисунок 1


Щелкните по этому узлу правой клавишей мыши, после чего, в открывшемся контекстном меню выберите «Добавить ссылку» (Add Link), как показано на рисунке 2


Рисунок 2


В открывшемся окне «Добавить ссылку», перейдите к закладке обзор. После этого перейдите к директории, в которую была установлена библиотека Tao Framework. (По умолчанию - C:\Program Files\Tao Framework). Нам потребуется папка bin - в ней хранятся необходимые нам библиотеки. Перейдите в папку bin и выберите3 библиотеки, как показано на рисунке 3:

1.Tao.OpenGL.dll - отвечает за реализация библиотеки OpenGL

2.Tao.FreeGlut.dll - отвечает за реализацию функций библиотеки Glut. Мы будем ее использовать для инициализации рендера, а так же для различных других целей.

3.Tao.Platform.Windows.dll - отвечает за поддержку элементов непосредственно для визуализации непосредственно на платформе Windows.


Рисунок 3


Теперь перейдите к исходному коду окна. Для работы с нашими библиотеками, нам необходимо подключить соответствующие пространства имен:


using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;

// для работы с библиотекой OpenGL Tao.OpenGl;

// для работы с библиотекой FreeGLUT Tao.FreeGlut;

// для работы с элементом управления SimpleOpenGLControl Tao.Platform.Windows;


Теперь вернитесь к конструктору диалогового окна и перейдите к окну Toolbox (панель элементов). Щелкните правой кнопкой на вкладке «Общие», и в раскрывшемся контекстном меню выберите пункт «Выбрать элементы» (Select elements), как показано на рисунке 4.


Рисунок 4


В открывшемся окне найдите элемент SimpleOpenGLControl и установите возле него галочку, как показано на рисунке 6. Затем нажмите ОК.


Теперь данный элемент станет доступным для размещения на форме приложения. Перетащите элемент на форму, и разместите так, как показано на рисунке 5. Справа от размещенного элемента установите 2 кнопки - «Визуализировать» и «Выйти».


Рисунок 5


Теперь выделите элемент simpleOpenGlControl1, расположенный на форме и перейдите к его свойствам. Измените параметр name на значение AnT. Далее во всех главах элементы simpleOpenGlControl мы будем называть AnT.


11. Инициализация OpenGL в C# .NET


Теперь нам необходимо инициализировать работу OpenGL.

Сначала мы в конструкторе класса должны инициализировать работу элемента AnT:


public Form1()

{();

AnT.InitializeContexts();

}


Снова перейдите к конструктору и сделайте двойной щелчок левой клавишей мыши на форме - создастся функция обработчик события загрузки формы.

В ней мы поместим код инициализации OpenGL. Подробное описание того, что делает этот код, мы рассмотрим в следующих главах, а сейчас мы только протестируем работу библиотек OpenGL и FreeGLUT.


private void Form1_Load(object sender, EventArgs e)

{

// инициализация Glut

Glut.glutInit();

Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);

// очитка окна

Gl.glClearColor(255, 255, 255, 1);

// установка порта вывода в соотвествии с размерами элемента anT

Gl.glViewport(0, 0, AnT.Width, AnT.Height);

// настройка проекции

Gl.glMatrixMode(Gl.GL_PROJECTION);.glLoadIdentity();.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);.glMatrixMode(Gl.GL_MODELVIEW);.glLoadIdentity();

// настройка параметров OpenGL для визуализации

Gl.glEnable(Gl.GL_DEPTH_TEST);

}


На окне мы создали 2 кнопки. Обработчик кнопки выйти будет выглядеть следующим образом


//обработчик кнопки "выйти"

private void button2_Click(object sender, EventArgs e)

{

Application.Exit();

}


Обработчик кнопки «Визуализировать» будет содержать код, реализующий визуализацию сеточного каркаса сферы, (за отрисовки трехмерной сферы будет отвечать библиотека FreeGLUT). Код, который будет размещен в данной функции, отвечает за разные технические аспекты визуализации, с которыми мы познакомимся в следующих главах.

Код функции:


// обработчик кнопки "визуализировать"

private void button1_Click(object sender, EventArgs e)

{

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

Gl.glLoadIdentity();.glColor3f(1.0f, 0, 0);.glPushMatrix();.glTranslated(0,0,-6);.glRotated(45, 1, 1, 0);

// рисуем сферу с помощью библиотеки FreeGLUT

Glut.glutWireSphere(2, 32, 32);

Gl.glPopMatrix();.glFlush();.Invalidate();

}


Откомпилируйте и запустите приложение.

Результат работы приложения показан на рисунке 9. Если вы правильно набрали все исходные коды и выполнили все описанные действия, то вы увидите аналогичную визуализацию сферы, после нажатия на кнопке «Визуализировать».



Вот и все. Мы протестировали работоспособность библиотеки Tao, инициализировав библиотеку OpenGL в C# .NET.

Список литературы


1.http://ru.wikipedia.org/wiki/OpenGL - основная информация со свободной энциклопедии.

2.http://gamedev.kz/?q=node/14 - Введение в OpenGL.

.http://www.esate.ru/page/uroki-OpenGL-c-sharp - уроки использования OpenGL API в среде .NET C#


Министерство Образования Российской Федерации Тюменский Государственный Университет Институт Математики Естественных Наук и Информационных Технологий

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ