Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

OpenGL


OpenGL logo

План:


Введення

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

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


1. Специфікація

На базовому рівні, 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.


2. Архітектура

OpenGL орієнтується на наступні два завдання:

  • Приховати складності адаптації різних 3D-прискорювачів, надаючи розробнику єдиний API.
  • Приховати відмінності в можливостях апаратних платформ, вимагаючи реалізації відсутньої функціональності за допомогою програмної емуляції.

Основним принципом роботи OpenGL є отримання наборів векторних графічних примітивів у вигляді крапок, ліній і багатокутників з наступною математичною обробкою отриманих даних і побудовою растрової картинки на екрані і / або в пам'яті. Векторні трансформації та растеризация виконуються графічним конвеєром (graphics pipeline), який по суті являє собою дискретний автомат. Абсолютна більшість команд OpenGL потрапляють в одну з двох груп: або вони додають графічні примітиви на вхід в конвеєр, або конфігурують конвеєр на різне виконання трансформацій.

OpenGL є низькорівневим процедурних API, що змушує програміста диктувати точну послідовність кроків, щоб побудувати результуючу растрову графіку (імперативний підхід). Це є основною відмінністю від дескрипторних підходів, коли вся сцена передається у вигляді структури даних (найчастіше дерева), яке обробляється і будується на екрані. З одного боку, імперативний підхід вимагає від програміста глибокого знання законів тривимірної графіки і математичних моделей, з іншого боку - дає свободу впровадження різних інновацій.


3. Розширення

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

Список зареєстрованих розширень можна знайти в офіційній базі розширень. [1]


4. Додаткові бібліотеки

Існує ряд бібліотек, створених поверх або на додаток до 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 має тільки набір геометричних примітивів (точки, лінії, багатокутники) з яких створюються всі тривимірні об'єкти. Часом подібний рівень деталізації не завжди зручний при створенні сцен. Тому поверх OpenGL були створені більш високорівневі бібліотеки, такі як Open Inventor і VTK. Дані бібліотеки дозволяють оперувати більш складними тривимірними об'єктами, що полегшує і прискорює створення тривимірної сцени.

GLM (OpenGL Mathematics) - допоміжна бібліотека, що надає програмістам на C + + класи і функції для виконання математичних операцій. Бібліотека може використовуватися при створенні 3D-програм з використанням OpenGL. [2] Однією з характеристик GLM є те, що реалізація заснована на специфікації GLSL. Вихідний код GLM використовує ліцензію MIT.


5. Незалежність від мови програмування

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


6. Історія

Комп'ютерна графіка знайшла широке поширення і застосування в повсякденному житті. Вчені використовують комп'ютерну графіку для аналізу результатів моделювання. Інженери і архітектори використовують тривимірну графіку для створення віртуальних моделей. Кінематографісти створюють спецефекти або повністю анімовані фільми (" Шрек "," Історія іграшок "та ін.) В останні роки широке поширення одержали також комп'ютерні ігри, максимально використовують тривимірну графіку для створення віртуальних світів.

Поширенню комп'ютерної графіки супроводжували свої труднощі. В 1990-х розробка програмного продукту, здатного працювати на великій кількості графічного обладнання, була пов'язана з великими тимчасовими і фінансовими витратами. Було необхідно окремо створювати модулі для кожного типу графічних адаптерів, що часом призводило до розмноження однакового програмного коду. Це сильно гальмувало розвиток і поширення комп'ютерної графіки.

Silicon Graphics Incorporated (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 і відсутності належної індустріальної підтримки, проект був закритий.


6.1. 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 (NVidia C for Graphics). Багато запропоновані можливості поки що немає у версії OpenGL 2.0, хоча деякі з них реалізовані багатьма виробниками у вигляді розширень.


6.2. OpenGL 3.0

11 серпня 2008 Khronos Group представила нову версію специфікації OpenGL. [6]

Підтримують відеокарти: Radeon HD серії; GeForce 8, 9, GTX 100, GTX 200, GTX 300 і GTX 400 серій.

6.2.1. OpenGL 3.1

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

Крім того, в OpenGL 3.1 доданий ряд нововведень, таких як:

  • Підтримка OpenGL Shading Language версії 1.40 ( GLSL).
  • CopyBuffer API для швидкого копіювання даних; використовується в поєднанні OpenCL.
  • Текстурні буферні об'єкти.
  • Uniform Buffer Objects.
  • Signed нормалізовані текстури.
  • Доступно мінімум 16 текстурних одиниць в vertex shader.
  • Primitive restart.
  • Instancing.

Для використання тільки OpenGL 3.1, потрібно використовувати gl3.h.


6.2.2. 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_fragment_coord_conventions) - для полегшення написання мультірендеров (з підтримкою OpenGL і DirectX).
  • Настройка "спонукає" вершини (GL_ARB_provoking_vertex) - для тих же цілей.
  • Безшовне фільтрування кубічних карт (GL_ARB_seamless_cube_map).
  • Текстура з мультівиборкой і текстурні семплери для заданих областей вибірки (GL_ARB_texture_multisample).
  • Управління відсіканням фрагментів по глибині (GL_ARB_depth_clamp) - для тіней і іншого.
  • Геометричні шейдери (GL_ARB_geometry_shader4).
  • Fence sync objects (GL_ARB_sync) - контроль завантаження в буфери.

6.2.3. OpenGL 3.3

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

6.3. OpenGL 4.0

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

Нововведення [8] :

  • Дві нові ступені обробки шейдерів, що дозволяє перенести обробку тесселяції з центрального процесора на GPU;
  • Підтримка вибіркових фрагментного шейдеров (per-sample fragment shaders) і програмованих фрагментного шейдеров вхідних позицій для збільшення якості рендеринга і гнучкості в управлінні згладжуванням;
  • Промальовування даних, згенерованих OpenGL або такими зовнішніми API, як OpenCL, без участі центрального процесора;
  • Шейдерні підпрограми допоможуть значно збільшити гнучкість написання програм;
  • Поділ стану текстур і текстурних даних через додавання нового типу даних під назвою "об'єкти семплів";
  • 64-бітова подвійна точність з плаваючою комою операцій з шейдерами і введення-виведення для збільшення точності та якості рендеринга;
  • Збільшення продуктивності, включаючи шейдери геометрії зразка, масивів зразка і нових запитів до таймеру.

6.3.1. 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 додатків
  • Механізми зворотного зв'язку для отримання помилок і попереджень

6.3.2. OpenGL 4.2

8 серпня 2011 Khronos Group опублікувала специфікацію OpenGL 4.2 і мови шейдеров GLSL 4.2 [9].
Нововведення:

  • Можливість використання в шейдерах атомарних лічильників і атомарних операцій модифікації (атомарний цикл читання-зміна-запис) для одного рівня текстур
  • Можливість геометричних перетворень з використанням тесселяції на стороні GPU і відтворення декількох екземплярів отриманих перетворень
  • Підтримка зміни довільної частини стислій текстури, без повторного завантаження в GPU текстури цілком
  • Підтримка упаковки декількох 8 - і 16-розрядних значень в один 32-розрядне значення для ефективної обробки шейдеров cо значним скороченням використовуваного об'єму пам'яті і підвищенням пропускної здатності.

Примітки

  1. Registry (redirect) - oss.sgi.com / projects / ogl-sample / registry /
  2. GLSL + Optional features = OpenGL Mathematics (GLM). A C + + mathematics library for 3D graphics - glm.g-truc.net / (Англ.)
  3. LWJGL - lwjgl.org / (Англ.) - OpenGL-прив'язка для Java мови та інші компоненти для розробки ігор
  4. Programming Language Bindings to OpenGL - www.opengl.org/resources/bindings/
  5. Exocortex | Computer graphics and simulation software - www.exocortex.org/3dengine
  6. The Khronos Group announced today it has released the OpenGL 3.0 specification - (Англ.) . opengl.org (11 серпня 2008). Фотогалерея - www.webcitation.org/61Cxbsz3d з першоджерела 25 серпня 2011.
  7. Khronos Unleashes Cutting-Edge, Cross-Platform Graphics Acceleration with OpenGL 4.0 - Press Releases (11 березня 2010). Фотогалерея - www.webcitation.org/61CxcWixl з першоджерела 25 серпня 2011.
  8. Огляд нововведень OpenGL 4.0 - www.opennet.ru/opennews/art.shtml?num=25759. OpenNet (???). архіві - www.webcitation.org/61Cxd5h08 з першоджерела 25 серпня 2011.
  9. Khronos Enriches Cross-Platform 3D Graphics with Release of OpenGL 4.2 Specificatio - Khronos Group (8 серпня 2011). Фотогалерея - www.webcitation.org/61CxeMteU з першоджерела 25 серпня 2011.

Література

  • Ron Fosner. OpenGL Programming for Windows 95 and Windows NT. Addison-Wesley. ISBN 0-201-40709-4
  • Mark Kilgard. OpenGL for the X Window System. Addison-Wesley. ISBN 0-201-48359-9
  • OpenGL Architecture Review Board та ін OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.4. Addison-Wesley. ISBN 0-321-17383-X
  • Randi J. Rost. OpenGL Shading Language. Addison-Wesley. ISBN 0-321-19789-5
  • OpenGL Architecture Review Board та ін OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 2, Fifth Edition. Addison-Wesley. ISBN 0-321-33573-2
  • Ву М., Девіс Т., Нейдер Дж., Шрайндер Д. OpenGL. Керівництво з програмування. Бібліотека програміста. Пітер, 2006. ISBN 5-94723-827-6
  • Ренді Дж. Зростання. OpenGL. Тривимірна графіка й мова програмування шейдеров. Для професіоналів. Пітер, 2005. ISBN 5-469-00383-3, 0-321-19789-5
  • Richard S. Wright, Benjamin Lipchak. OpenGL SuperBible. 3rd ed. SAMS Publishing. ISBN 0-672-32601-9
  • Річард С. Райт мл., Бенджамін Липчак. OpenGL. Суперкнига = OpenGL SuperBible - 3 вид. - М .: Вільямс, 2006. - С. 1040. - ISBN 5-8459-0998-8.
  • Дональд Херн, М. Паулін Бейкер. Комп'ютерна графіка й стандарт OpenGL = Computer Graphics with OpenGL - 3-е изд. - М .: Вільямс, 2005. - 1168 с. - ISBN 5-8459-0772-1.
  • Едвард Енджел. Інтерактивна комп'ютерна графіка. Вступний курс на базі OpenGL = Interactive Computer Graphics. A Top-Down Approach with Open GL - 2-е вид. - М .: Вільямс, 2001. - 592 с. - ISBN 5-8459-0209-6.

Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
OpenGL ES
Java OpenGL
OpenGL Shading Language
OpenGL Architecture Review Board
© Усі права захищені
написати до нас
Рейтинг@Mail.ru