написання програм для конкретного обладнання. Якщо пристрій підтримує якусь функцію, то ця функція виконується апаратно, якщо ні, то бібліотека виконує її програмно.
Що ж представляє із себе 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), щ...