Введение - Библиотека OpenGL
OpenGL - это программный интерфейс к графической аппаратуре. Этот интерфейс состоит приблизительно из 250 отдельных команд (около 200 команд в самой OpenGL и еще 50 в библиотеке утилит), которые используются для указания объектов и операций, которые необходимо выполнить, чтобы получить интерактивное приложение, работающее с трехмерной графикой. оpengl программный интерфейс графический
Библиотека 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 может производить и другие операции, например, удаление частей объектов, скрытых другими объектами. В дополнение к этому, после того, как сцена растеризована, но до того, как она выводится на экран, вы можете производить некоторые операции с пиксельными данными, если это необходимо.
Общий порядок работы с библиотекой OpenGl таков:
- 1. Инициализировать окно (получить область для вывода изображения) 2. Установить камеру 3. Включить свет (если это необходимо) 4. В цикле начать выводить примитивы (точки, линии, полигоны), предварительно очищая окно от предыдущего рисунка.
Инициализация окна.
Если вы работаете в Visual C++, то окно, создается при помощи функций
AuxInitPosition
AuxInitDisplayMode
AuxInitWindow
Основной цикл рисования кадра создается в функции Draw и регистрируется при помощи функции
AuxMainLoop(Draw);
Static void CALLBACK Draw(void) // создается пользователем
{...}
Void main()
{
// расположение окна OpenGL на экране
AuxInitPosition(100, 100, windowW, windowH);
// установка основных параметров работы OpenGL
// цветовой режим RGB | включение Z-буфера для сортировки по глубине
// |Двойная буферизация
AuxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
// инициализация окна OpenGL с заголовком Title
If(auxInitWindow("Example1") ==GL_FALSE) auxQuit();
// регистрация функции, которая вызывается при перерисовке
// и запуск цикла обработки событий
// Draw() - функция пользователя
AuxMainLoop(Draw);
}
Если вы работаете в Borland C++ Builder, то для инициализации окна, надо получить Handle (уникальный идентификатор окна Windows) того окна, на котором вы будите рисовать. Handle имеется у всех окон-приложений верхнего уровня и у большинства дочерних окон. В наших примерах мы будем рисовать на дочернем окне StaticText.
Далее мы должны создать Контекст рисования (device context) и установить его формат. Для этого инициализируется структуру PIXELFORMATDESCRIPTOR (формат описания пикселей). В этой структуре описывается, требуется ли нам поддержка буфера глубины, двойной буферизации и проч.).
Затем следуют функции :
ChoosePixelFormat
SetPixelFormat
Создается контекст рисования OpenGL:
WglCreateContext(hdc);
А потом связываются контексты OpenGL и Windows:
WglMakeCurrent(hdc, hrc)
Void __fastcall TFormMain::FormCreate(TObject *Sender)
{
// возьмем ХЕНДЛ окошка StaticText
Static HWND Handle=a->Handle;
// создадим Хендл места рисования для окна StaticText
Hdc = GetDC (Handle) ;
// устанавливаем соответствующие настройки контекста устройства
PIXELFORMATDESCRIPTOR pfd = {
Sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
- 24, 0,0,0,0,0,0, 0,0, 0,0,0,0,0, 32, 0, 0,
PFD_MAIN_PLANE,
- 0, 0,0,
};
// выбрать соответствующий формат
PixelFormat = ChoosePixelFormat(hdc, &;pfd);
SetPixelFormat(hdc, PixelFormat, &;pfd);
// создадим контекст устройства для OpenGL
// используя Хендл места рисования
Hrc = wglCreateContext(hdc);
If(hrc == NULL)
ShowMessage(":-)~ hrc == NULL");
If(wglMakeCurrent(hdc, hrc) == false)
ShowMessage("Could not MakeCurrent");
...}
Установка камеры
По умолчанию камера расположена в начале координат (0, 0, 0), направлена вдоль отрицательного направления оси z, и вектором верхнего направления имеет (0, 1, 0).
Для установки камеры удобно использовать функцию gluLookAt(). Хотя она имеет 9 параметров, в них легко разобраться. Они делятся по три параметра, соответственно для трех точек: Eye (Глаз), Center, Up.
Глаз определяет точку откуда смотрим, Центр - куда смотрим, а вектор верха определяет, где у нас должен быть верх ( представьте себе пилота в самолете летящего головой вниз). Вектора удобно заключать в классы с переопределенными операциями.
GluLookAt(e. x,e. y,e. z, c. x,c. y,c. z, u. x,u. y,u. z );
Основной цикл включает в себя следующие этапы рисования кадра:
- 1. Очистку буферов от рисования предыдущей картинки 2. Функции рисования примитивов 3. Функции завершения рисования и ожидания ответа видеокарты 4. Функции копирования изображения из памяти на экран
Основной цикл не включает в себя обработку событий, таких как нажатие клавиш и изменение размеров окна. Для обработки событий создаются отдельные функции и присоединяются к приложению дополнительно.
Если вы работаете в Visual C, то это осуществляется при помощи функций, прототипы которых описаны в файле glaux. h :
AuxMouseFunc()
AuxKeyFunc()
AuxReshapeFunc()
Если вы работаете в Borland C, то обработка событий осуществляется традиционным для созданных этой программной средой образом: вы просто выбираете компонент(например, Button1), создаете обработчик (например нажатие клавиши) и внутри описываете тело функции.
Похожие статьи
-
Заключение - Библиотека OpenGL
Система OpenGL является гибким процедурным интерфейсом, позволяющим программисту разрабатывать различные приложения с применением трехмерной графики. В...
-
Коммуникационная библиотека MPI MPI это интерфейс прикладного программирования к библиотеке пересылки сообщений, содержащий в себе спецификации к...
-
В качестве доступного инструментария были рассмотрены две открытые кроссплатформенные библиотеки для разработки C++ приложений WxWidgets и Boost ,...
-
Рисование примитивов, Далее приведены суффиксы используемые в OpenGL - Библиотека OpenGL
Рисование примитивов осуществляется командами glBegin() и glEnd(). Константа переданная функции glBegin определяет тип примитива, который будет...
-
XXI век - эра компьютерных технологий, время автоматизации процессов. Компьютеры стали неотъемлемой частью нашей жизни, они окружают нас повсеместно....
-
Введение - Повышение производительности работы библиотеки GridMD
На сегодняшний день уровень развития вычислительной техники и средств доступа к вычислительным ресурсам предоставляет значительные возможности по...
-
Разработка динамических библиотек
Лекция №42. Разработка динамических библиотек Содержание: Создание собственной DLL Вызов функций из DLL Загрузка DLL с неявной компоновкой Загрузка DLL с...
-
Введение - Вычисление максимума функции с некоторыми критериями
Если функция, определенная и непрерывная в заданном промежутке, не является в нем монотонной, то найдутся такие части этого промежутка, в которых...
-
Конфигурация "Управление производственным предприятием" является современной многооконной системой. Каждое из ее окон (многие из которых -- диалоговые...
-
Введение - Библиотека функциональных модулей системы EXP PKS
Корпорация Honeywell International известна своими разработками в области аэрокосмического оборудования, технологий для эксплуатации зданий и...
-
Введение - Применение нейрокомпьтерных технологий в методах управления сложными объектами
Данная статья посвящена аналитическому обзору возможностей управления сложными объектами с помощью нейрокомпьютеров. Рассмотрено несколько областей, в...
-
Как так получается, что на экране оживает почти настоящий, реальный мир, да еще и в 3D? Люди, которые в первый раз встречаются с интерактивным 3D, обычно...
-
В настоящее время в медицинских исследованиях широко используются компьютерные томографы. С их помощью можно получить поперечное...
-
Введение, РЕКУРСИЯ - Рекурсивное программирование
Основой для разработки рекурсивных алгоритмов служат, так называемые, Рекуррентные соотношения (формулы), устанавливающие зависимость между результатами...
-
Введение - Технология разработки программного обеспечения систем управления
С++ является языком объектно-ориентированного программирования (ООП). Объект - абстрактная сущность, наделенная характеристиками объектов реального мира....
-
Введение, Правила и порядок выполнения курсовой работы - Программирование в среде Turbo Pascal
Настоящие методические указания предназначены для выполнения курсовой работы "Расчеты на ЭВМ характеристик выходных сигналов электрических цепей" по...
-
Данный курсовой проект посвящен разработке модели программно-аппаратной защиты информации на предприятии. Проблема защиты информации на предприятии...
-
Введение - Объектно-ориентированный подход и диаграммы классов в UML
Психологи уже давно показали, что средний человек может одновременно воспринимать адекватно в пределах десятка единиц информации. Таким образом, при...
-
Введение, Операционная система Windows - Операционная система Windows
Компьютер сам по себе (Hardware) без разработанных человеком для него программ (Software) не может выполнить какой-либо работы. Программы для компьютера...
-
Введение - Поверка и калибровка информационно измерительных систем
На сегодня метрологическая деятельность регулируется Законом Российской Федерации "Об обеспечении единства измерений". Из этого следует, что эта...
-
Введение - Обьекто-ориентированное программирование
Объектно-ориентированное программирование (ООП) позволяет разложить проблему на составные части, каждая из которых становится самостоятельным объектом....
-
Введение - Основные свойства функциональных языков программирования
Созданная в 1998 году спецификация языка Haskell (названного так в честь ученого Хаскелла Карри, одного из основоположников функционального...
-
Создание очереди заданий - Повышение производительности работы библиотеки GridMD
Для организации работы потоков был выбран паттерн проектирования Пул потоков (Thread Pool) [16] . Пул потоков является объектом, которому возможна выдача...
-
Workflow-методология - Повышение производительности работы библиотеки GridMD
Суть workflow-методологии хорошо отражена в определении, данным Workflow Management Coalition [5] - это автоматизация бизнес процесса, при котором...
-
Об этом документе Этот документ описывает, как формировать и контролировать DeviceNet СЕТЬ, используя библиотеку интерфейса DeviceNet. Документ...
-
Предметная область IoT (Интернет вещей) - это сеть физических объектов - устройств, транспортных средств, зданий и других вещей со встроенной...
-
Модель вычислительного процесса в GridMD - Повышение производительности работы библиотеки GridMD
Узлы графа исполнения, используемого в GridMD, представляют собой конкретные этапы исполнения, с которыми связываются действия, определяемые программным...
-
Библиотека GridMD поддерживает три механизма определения действий, связываемых с узлами графа [8]. Узел графа может соответствовать исполнению стороннего...
-
Основные компоненты библиотеки - Повышение производительности работы библиотеки GridMD
Двумя главными компонентами библиотеки GridMD является менеджер сценариев и менеджер заданий (Рис. 4) [10]. Менеджер сценариев разбирает определенный...
-
Несмотря на то, что к IoT Hub можно подключиться напрямую, используя протоколы HTTP или AMQP), Microsoft также предоставляет разные SDK для разных языков...
-
Введение - Обеспечение защиты от несанкционированного доступа в организации
Информационная безопасность - одно из популярнейших сегодня понятий. Наша жизнь уже неразрывно связана с информационными технологиями в современном их...
-
В связи с выросшей потребностью в доступе к сети Интернет в настоящее время встает вопрос в грамотной организации сети, способной обрабатывать большие...
-
Введение - Работа со слоями в AutoCAD
Первые версии системы AutoCAD, разрабатываемой американской фирмой Autodesk, появились еще в начале 80-х годов двадцатого века и сразу же привлекли к...
-
Редукторы получили широкое распространение во всех отраслях народного хозяйства, поэтому важно их рациональное проектирование. Уменьшение веса...
-
Информатика - в настоящее время одна из фундаментальных областей научного знания, формирующая системно-информационный подход к анализу окружающего мира,...
-
В данной курсовой осуществляется знакомство с инструментальными средствами создания программных продуктов и автоматизации работы пользователя...
-
Все параметры политик располагаются в объекте групповых политик GPO (Group Policy Object). Объекты групповых политик делятся на две категории: * Доменные...
-
Введение, Роль и значение информационных революций. - Проблемы компьютеризации общества
Трудно назвать другую сферу человеческой деятельности, которая развивалась бы столь стремительно и порождала бы такое разнообразие проблем и мнений, как...
-
"ВВЕДЕНИЕ" - Презентация "Принтеры"
Принтеры предназначены для вывода алфавитно-цифровой и графической информации на бумагу. Что бы ни говорили о превосходстве электронных носителей...
-
OpenGL - Компьютерная графика и ее аппаратная реализация (обзор видеокарт)
OpenGL -- это универсальная, аппаратно - независимая библиотека, которая поддерживает разнообразные 3D-объекты и конструкции, начиная с примитивов и...
Введение - Библиотека OpenGL