Что это за программа opengl

Знакомство с OpenGL нужно начать с того, что OpenGL — это спецификация. Т.е. OpenGL лишь определяет набор обязательных возможностей. Реализация же зависит от конкретной платформы.
OpenGL является кроссплатформенным, независимым от языка программирования API для работы с графикой. OpenGL — низкоуровневый API, поэтому для работы с ним неплохо иметь некоторое представление о графике в целом и знать основы линейной алгебры.

Именования

  • Число параметров — указывает число принимаемых параметров. Принимает следующие значения: 1, 2, 3, 4
  • Тип параметров — указывает тип принимаемых параметров. Возможны следующие значения: b, s, i, f, d, ub, us, ui. Т.е. byte (char в C, 8-битное целое число), short (16-битное целое число), int (32-битное целое число), float (число с плавающей запятой), double (число с плавающей запятой двойной точности), unsigned byte, unsigned short, unsigned int (последние три — беззнаковые целые числа)
  • Представление параметров — указывает в каком виде передаются параметры, если каждое число по отдельности, то ничего не пишется, если же параметры передаются в виде массива, то к названию функции дописывается буква v

Графика

  • GL_POINTS — каждая вершина задает точку
  • GL_LINES — каждая отдельная пара вершин задает линию
  • GL_LINE_STRIP — каждая пара вершин задает линию (т.е. конец предыдущей линии является началом следующей)
  • GL_LINE_LOOP — аналогично предыдущему за исключением того, что последняя вершина соединяется с первой и получается замкнутая фигура
  • GL_TRIANGLES — каждая отдельная тройка вершин задает треугольник
  • GL_TRIANGLE_STRIP — каждая следующая вершина задает треугольник вместе с двумя предыдущими (получается лента из треугольников)
  • GL_TRIANGLE_FAN — каждый треугольник задается первой вершиной и последующими парами (т.е. треугольники строятся вокруг первой вершины, образуя нечто похожее на диафрагму)
  • GL_QUADS — каждые четыре вершины образуют четырехугольник
  • GL_QUAD_STRIP — каждая следующая пара вершин образует четырехугольник вместе с парой предыдущих
  • GL_POLYGON — задает многоугольник с количеством углов равным количеству заданных вершин
  1. glBegin ( GL_QUADS ) ;
  2. glColor3f ( 1.0 , 1.0 , 1.0 ) ;
  3. glVertex2i ( 250 , 450 ) ;
  4. glColor3f ( 0.0 , 0.0 , 1.0 ) ;
  5. glVertex2i ( 250 , 150 ) ;
  6. glColor3f ( 0.0 , 1.0 , 0.0 ) ;
  7. glVertex2i ( 550 , 150 ) ;
  8. glColor3f ( 1.0 , 0.0 , 0.0 ) ;
  9. glVertex2i ( 550 , 450 ) ;
  10. glEnd ( ) ;

Основы программы на OpenGL

  • GLUT_RGBA — включает четырехкомпонентный цвет (используется по умолчанию)
  • GLUT_RGB — то же, что и GLUT_RGBA
  • GLUT_INDEX — включает индексированный цвет
  • GLUT_DOUBLE — включает двойной экранный буфер
  • GLUT_SINGLE — включает одиночный экранный буфер (по умолчанию)
  • GLUT_DEPTH — включает Z-буфер (буфер глубины)
  • GLUT_STENCIL — включает трафаретный буфер
  • GLUT_ACCUM — включает буфер накопления
  • GLUT_ALPHA — включает альфа-смешивание (прозрачность)
  • GLUT_MULTISAMPLE — включает мультисемплинг (сглаживание)
  • GLUT_STEREO — включает стерео-изображение
  • void glutDisplayFunc (void (*func) (void)) — задает функцию рисования изображения
  • void glutReshapeFunc (void (*func) (int width, int height)) — задает функцию обработки изменения размеров окна
  • void glutVisibilityFunc (void (*func)(int state)) — задает функцию обработки изменения состояния видимости окна
  • void glutKeyboardFunc (void (*func)(unsigned char key, int x, int y)) — задает функцию обработки нажатия клавиш клавиатуры (только тех, что генерируют ascii-символы)
  • void glutSpecialFunc (void (*func)(int key, int x, int y)) — задает функцию обработки нажатия клавиш клавиатуры (тех, что не генерируют ascii-символы)
  • void glutIdleFunc (void (*func) (void)) — задает функцию, вызываемую при отсутствии других событий
  • void glutMouseFunc (void (*func) (int button, int state, int x, int y)) — задает функцию, обрабатывающую команды мыши
  • void glutMotionFunc (void (*func)(int x, int y)) — задает функцию, обрабатывающую движение курсора мыши, когда зажата какая-либо кнопка мыши
  • void glutPassiveMotionFunc (void (*func)(int x, int y)) — задает функцию, обрабатывающую движение курсора мыши, когда не зажато ни одной кнопки мыши
  • void glutEntryFunc (void (*func)(int state)) — задает функцию, обрабатывающую движение курсора за пределы окна и его возвращение
  • void glutTimerFunc (unsigned int msecs, void (*func)(int value), value) — задает функцию, вызываемую по таймеру
Читайте также:
Acg player что это за программа

Первая программа

[OpenGL & C#] №0. Что такое OpenGL?

Как решить проблему с OpenGL


Теперь мы знаем основы работы с OpenGL. Можно написать простую программу для закрепления знаний.
Начнем с того, что нужно подключить заголовочный файл GLUT:

  1. #if defined(linux) || defined(_WIN32)
  2. #include /*Для Linux и Windows*/
  3. #else
  4. #include /*Для Mac OS*/
  5. #endif

Теперь мы уже знаем, что писать в main. Зарегистрируем два обработчика: для рисования содержимого окна и обработки изменения его размеров. Эти два обработчика по сути используются в любой программе, использующей OpenGL и GLUT.

  1. int main ( int argc , char * argv [ ] )
  2. glutInit (
  3. glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGBA ) ; /*Включаем двойную буферизацию и четырехкомпонентный цвет*/
  4. glutInitWindowSize ( 800 , 600 ) ;
  5. glutCreateWindow ( «OpenGL lesson 1» ) ;
  6. glutReshapeFunc ( reshape ) ;
  7. glutDisplayFunc ( display ) ;
  8. glutMainLoop ( ) ;
  9. return 0 ;
  10. >

Теперь надо написать функцию-обработчик изменений размеров окна. Зададим область вывода изображения размером со все окно при помощи команды glViewport (х, у, ширина, высота). Затем загрузим матрицу проекции glMatrixMode (GL_PROJECTION), заменим ее единичной glLoadIdentity () и установим ортогональную проекцию. И наконец загрузим модельно-видовую матрицу glMatrixMode (GL_MODELVIEW) и заменим ее единичной.
В итоге получим:

  1. void reshape ( int w , int h )
  2. glViewport ( 0 , 0 , w , h ) ;
  3. glMatrixMode ( GL_PROJECTION ) ;
  4. glLoadIdentity ( ) ;
  5. gluOrtho2D ( 0 , w , 0 , h ) ;
  6. glMatrixMode ( GL_MODELVIEW ) ;
  7. glLoadIdentity ( ) ;
  8. >
  • GL_COLOR_BUFFER_BIT — для очистки буфера цвета
  • GL_DEPTH_BUFFER_BIT — для очистки буфера глубины
  • GL_ACCUM_BUFFER_BIT — для очистки буфера накопления
  • GL_STENCIL_BUFFER_BIT — для очистки трафаретного буфера
  1. void display ( )
  2. glClear ( GL_COLOR_BUFFER_BIT ) ;
  3. glBegin ( GL_QUADS ) ;
  4. glColor3f ( 1.0 , 1.0 , 1.0 ) ;
  5. glVertex2i ( 250 , 450 ) ;
  6. glColor3f ( 0.0 , 0.0 , 1.0 ) ;
  7. glVertex2i ( 250 , 150 ) ;
  8. glColor3f ( 0.0 , 1.0 , 0.0 ) ;
  9. glVertex2i ( 550 , 150 ) ;
  10. glColor3f ( 1.0 , 0.0 , 0.0 ) ;
  11. glVertex2i ( 550 , 450 ) ;
  12. glEnd ( ) ;
  13. glutSwapBuffers ( ) ;
  14. >

Итог

screen

Все! Можно компилировать. Должно получиться что-то вроде этого:

Весь код целиком (для кто не осилил статью).
В принципе ничего сложного в этом нет, по крайней мере если вы уже сталкивались с графикой до этого.

OpenGL — удобный инструмент для создания кроссплатформенных приложений, использующий графику. OpenGL легко использовать с тем языком программирования, который вам более удобен. Привязки к OpenGL есть для множества популярных языков, таких как C, C++, C#, Java, Python, Perl, VB и других. Посмотреть информацию о них можно на официальном сайте OpenGL.

Источник: habr.com

Введение в OpenGL

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

В следующих разделах представлено глобальное представление о том, как работает OpenGL:

  • Примитивы и команды обсуждают точки, сегменты линий и многоугольников в качестве основных единиц рисования; и обработка команд.
  • Элемент управления «Графический элемент Управления OpenGL » описывает, какие графические операции OpenGL и какие элементы управления не управляются.
  • Модель выполнения описывает модель клиента или сервера для интерпретации команд OpenGL.
  • Базовая операция OpenGL дает общее описание того, как OpenGL обрабатывает данные для создания соответствующего изображения в framebuffer.
  • Имена функций OpenGL описывают соглашения об именовании, используемые в OpenGL.

Источник: learn.microsoft.com

Знакомство с OpenGL

OpenGL (Open Graphics Language) — это интерфейс трехмерной графики, предложенный фирмой SGI (которая ранее называлась Silicon Graphics Incorporated). OpenGL появился в результате переработки специализированного 3D-интерфейса этой фирмы IrisGL на универсальный, независимый от платформы. Данный интерфейс позволяет создавать трехмерные графические изображения независимо от используемых оконных интерфейсов, операционной системы и графических устройств.

В настоящее время разработкой стандарта OpenGL занимается индустриальный консорциум OpenGL Architecture Review Board (ARB), в состав которого входят представители таких фирм, как SGI, Microsoft, Intel, IBM и Digital Equipment.

Версии OpenGL существуют на графических станциях фирмы SGI (под управлением как операционной системы IRIX, так и Windows NT), рабочих станциях фирмы DEC, компьютерах IBM RS/6000 и всех платформах, поддерживаемых операционными системами семейства Microsoft Windows.

Читайте также:
Нотион программа для чего

OpenGL API

В основе OpenGL лежит библиотека графических функций, предоставляющих разработчику все необходимое для создания и отображения плоских (2D) и пространственных (3D) моделей и анимации. Эта библиотека, содержащая более 100 функций, обеспечивает средства для управления графическими примитивами, выполнения матричных преобразований, задания источников света, теней, управления цветами и т.п. Существует также библиотека функций более высокого уровня, сервисы которой позволяют отображать полигональные трехмерные модели, строить кривые и поверхности на основе NURBS (неоднородных рациональных B-сплайнов) и поддерживают ряд других операций. Отдельные реализации библиотеки OpenGL содержат расширения, специфичные для конкретной операционной системы или аппаратной платформы.

Как мы отметили выше, OpenGL независима от конкретной платформы. Поэтому приложение, созданное, например, для графической станции SGI, может быть перенесено на платформу Windows c минимальными затратами — переписываются только те части кода, которые непосредственно связаны со взаимодействием с оконной системой или операционной системой.

На рис. 1 показано, как ядро OpenGL интегрируется в операционную систему.

Программный интерфейс OpenGL не содержит функций для управления окнами и функции для взаимодействия с пользователем — они исключены для обеспечения максимальной аппаратной независимости библиотеки. Тем не менее программисты могут объединять возможности OpenGL с другими библиотеками или функциями, предоставляемыми ядром той или иной операционной системы.

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

Функции OpenGL доступны практически из любого языка программирования, но большинство примеров и кода в статьях приводится на языке С. В Internet вы сможете найти необходимые интерфейсные модули для Visual Basic, Delphi и других языков. Обратите внимание на то, что фирма Softoholic (http:\www.softoholic.bc.ca) выпустила компонент OGL ActiveX Control, который реализует всю функциональность OpenGL и доступен из различных языков программирования и сред, поддерживающих компоненты ActiveX. Также существует библиотека расширения OpenGL на языке С++ — OpenInventor.

Аппаратная поддержка

Большое число графических карт с ускорителями и специализированных 3D-карт поддерживает выполнение примитивов OpenGL на аппаратном уровне. Эти карты, а также специализированные процессоры, перечислены в приложении 1.

Основные функции OpenGL

Ниже кратко перечислены основные функции и возможности, реализованные в библиотеке OpenGL. Для удобства некоторые термины приводятся как на русском языке, так и в оригинале.

  • Геометрические примитивы. Позволяют задавать математическое описание объектов. В настоящее время существуют следующие примитивы: точки, линии, многоугольники и растровые изображения (bitmap).
  • Цветное кодирование в формате RGBA (Red-Green-Blue-Alpha) или в режиме индексированных цветов.
  • Просмотр и моделирование позволяют размещать трехмерные объекты на сцене, передвигать камеры вокруг сцены и выбирать требуемый вид (точку обзора), для которого выполняется рендеринг.
  • Текстуры помогают привнести реализм в модели за счет имитации реальных поверхностей (их изображения накладываются поверх «скелета» модели, составленного из многоугольников).
  • Освещение является неотъемлемой частью всей трехмерной графики. OpenGL предоставляет в распоряжение пользователя функции для расчета цвета любой точки — необходимо только описать свойства материала и источники света для той или иной сцены.
  • Двойная буферизация позволяет устранить мерцание при анимации. Каждый следующий кадр анимации строится в отдельном буфере памяти и отображается только по завершении рендеринга.
  • Антиалиасинг(Anti-aliasing) сглаживает «ступенчатые» края цветовых переходов. Антиалиасинг является стандартной техникой в компьютерной графике, и суть ее заключается в изменении цвета и интенсивности точек вблизи линии резкого перехода цветов для уменьшения появления «лестничного эффекта». «Ступенчатые» линии особенно заметны при низком графическом разрешении.
  • Затенение по методу Гуро (Gouraud Shading) — закраска 3D-объектов, при которой сначала рассчитывается освещение вдоль ребер треугольников на основании данных об освещенности вершин, а затем на основании этих данных и направления градиентов изменения цвета закрашивается внутренняя поверхность треугольников.
  • Z-буферизация используется для сохранения информации о «глубине» трехмерного объекта (Z-координаты). Z-буфер используется для определения близости наблюдателя к объекту и удаления невидимых поверхностей.
  • Атмосферные эффекты — туман или дымка делают компьютерные изображения более реалистичными. Без атмосферных эффектов изображения зачастую выглядят нереально резкими и слишком четко очерченными. Fog — это термин, который на самом деле описывает алгоритм моделирования тумана, дымки, загрязнений или просто эффект присутствия воздуха, придавая изображению определенную глубину.
  • Alpha-смешение (Alpha Blending) использует значение Альфа-буфера (информации о прозрачности пикселов) как составляющую расширенного цветового кода растрового изображения в формате RGBA, позволяя комбинировать цвет обрабатываемого фрагмента с цветом точек, которые уже хранятся в буфере изображения. Представьте, например, отрисовку прозрачного голубого стекла перед красной коробкой. Alpha-смешение позволяет моделировать прозрачность стекла таким образом, что часть коробки, которая видна сквозь стекло, будет иметь необходимый в данном случае сиреневый оттенок.
  • Трафаретные планы (Stencil Planes) ограничивают отрисовку на некоторых областях экрана по маске (трафарету).
  • Списки отображения (Display Lists) позволяют сохранять команды отрисовки в некотором списке для дальнейшего рендеринга. При правильном применении такие списки могут заметно повысить скорость и производительность рендеринга.
  • Полиномные вычисления (Polynomial Evaluations) используются для поддержки NURBS-сплайнов. С их помощью можно рисовать плавные кривые через небольшой набор опорных точек, что исключает необходимость сохранять все промежуточные значения.
  • Обратная связь, выделение и выбор (Feedback, Selection, Picking) — эти функции дают возможность создавать приложения, позволяющие пользователю выбирать область экрана или отдельный объект, изображенный на экране. Режим обратной связи позволяет разработчику получать результаты расчетов, полученных при рендеринге.
  • Растровые примитивы — растровые изображения (прямоугольные картинки, состоящие из точек).
  • Операции с пикселами.
  • Различные преобразования: вращение, масштабирование, перемещение, перспективные искажения и т.д.
Читайте также:
Программа wps connect что это

Заключение

Завершая этот небольшой обзор библиотеки OpenGL, отметим, что она, несомненно, является одной из самых перспективных библиотек трехмерной графики, имеющихся в распоряжении разработчиков. Основное преимущество данной библиотеки — аппаратная и платформная независимость, позволяющая экономить силы разработчиков при создании приложений, работающих на различных платформах.

Отметим, что в качестве дополнения к библиотеке OpenGL существует библиотека GLUT (GL Utility Toolkit), которая обеспечивает более простую интеграцию OpenGL с конкретным оконным интерфейсом — X11, Windows, Motif и т.п. Использование этой библиотеки не только скрывает от разработчика нюансы программирования того или иного интерфейса, но и делает приложение независимым от платформы.

Большое количество приложений поддерживает работу с библиотекой OpenGL. Некоторые из них перечислены в приложении 2.

  • ПК и комплектующие
  • Настольные ПК и моноблоки
  • Портативные ПК
  • Серверы
  • Материнские платы
  • Корпуса
  • Блоки питания
  • Оперативная память
  • Процессоры
  • Графические адаптеры
  • Жесткие диски и SSD
  • Оптические приводы и носители
  • Звуковые карты
  • ТВ-тюнеры
  • Контроллеры
  • Системы охлаждения ПК
  • Моддинг
  • Аксессуары для ноутбуков
  • Принтеры, сканеры, МФУ
  • Мониторы и проекторы
  • Устройства ввода
  • Внешние накопители
  • Акустические системы, гарнитуры, наушники
  • ИБП
  • Веб-камеры
  • KVM-оборудование
  • Сетевые медиаплееры
  • HTPC и мини-компьютеры
  • ТВ и системы домашнего кинотеатра
  • Технология DLNA
  • Средства управления домашней техникой
  • Планшеты
  • Смартфоны
  • Портативные накопители
  • Электронные ридеры
  • Портативные медиаплееры
  • GPS-навигаторы и трекеры
  • Носимые гаджеты
  • Автомобильные информационно-развлекательные системы
  • Зарядные устройства
  • Аксессуары для мобильных устройств
  • Цифровые фотоаппараты и оптика
  • Видеокамеры
  • Фотоаксессуары
  • Обработка фотографий
  • Монтаж видео
  • Операционные системы
  • Средства разработки
  • Офисные программы
  • Средства тестирования, мониторинга и диагностики
  • Полезные утилиты
  • Графические редакторы
  • Средства 3D-моделирования
  • Веб-браузеры
  • Поисковые системы
  • Социальные сети
  • «Облачные» сервисы
  • Сервисы для обмена сообщениями и конференц-связи
  • Разработка веб-сайтов
  • Мобильный интернет
  • Полезные инструменты
  • Средства защиты от вредоносного ПО
  • Средства управления доступом
  • Защита данных
  • Проводные сети
  • Беспроводные сети
  • Сетевая инфраструктура
  • Сотовая связь
  • IP-телефония
  • NAS-накопители
  • Средства управления сетями
  • Средства удаленного доступа
  • Системная интеграция
  • Проекты в области образования
  • Электронный документооборот
  • «Облачные» сервисы для бизнеса
  • Технологии виртуализации
1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12

Источник: compress.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru