Я згоден щодо вищезазначених книг з кількома нотами:
8-й посібник з програмування OpenGL вийшов і був перероблений для сучасного OpenGL 4.3.
SuperBible 5-е видання надає вам бібліотеку милиць для початку, але, переходячи через книгу, ви повторно реалізуєте функціональність цієї бібліотеки, тому до кінця ви маєте бути повністю розбиратися. Я також настійно рекомендую обгортати речі OpenGL в щось, якщо ви використовуєте об'єктно-орієнтовану мову. Я працюю над своєю власною бібліотекою для розваги, яка, здається, є шляхом, реалізуючи її, я розумію всі плюси і мінуси, і мені потрібно лише вкласти ті біти, якими я насправді користуюся. Крім того, ви можете абстрагувати деякі речі, як-от надсилання даних у шейдери (не блискучийMaterial.setColor (червоний) набагато приємніше), це також може дати вам змогу підтримувати деякі речі, надаючи застарілі альтернативи. Також є oglplus .
Основна проблема вивчення сучасного «ядрового» OpenGL полягає в тому, що для того, щоб підготувати базовий конвеєр і працювати, навіть якщо це просто намалювати куб, вам потрібно зрозуміти наступне:
- Матричні операції (використовуйте GLM, якщо ви перебуваєте на C ++, вам також знадобиться версія MatrixStack OpenGL Unofficial SDK тут , або моя проста тут .)
- Програмування шейдерних програм GLSL.
- прив'язування даних до шейдерів та об'єктів Vertex Buffer. Якби ви хотіли навчитися просто справжньому чистому профільному ядру, всі вони повинні бути реалізовані одночасно, і якщо щось порушено, ви просто не побачите нічого і майже не маєте поняття, куди це пішло не так. Це також не охоплює такі речі, як базове освітлення (де крім мови програмування потрібно вивчити алгоритми затінення).
Але не потрібно починати в поглибленні з основного профілю. Використовуйте частину застарілої функціональності на початку, майже все, як і раніше, підтримуватиме її, а потім модернізувати.
Інша проблема полягає в тому, що "сучасний" OpenGL може реально посилатися на 3 речі:
Перший - це програмований шейдерний трубопровід на відміну від трубопроводу з фіксованою функцією. Основні «сучасні» методи були можливі з моменту виходу OpenGL 2.0 у 2004 році, коли введені шейдери (підручники просто не оновлювалися) також у 1.5 були об'єкти Vertex Buffer, які є ще одним наріжним каменем сучасного OpenGL. Проблема полягає в тому, що навіть сьогодні розробники OpenGL можуть навіть не в змозі скористатися всіма цими речами, там є безліч хижих нетбуків з тими чіпсетами Intel, які підтримують лише OpenGL 1.5, та телефонами, такими як старі iPhone / Android, які підтримують лише OpenGL ES 1.1. Єдина реальна відмінність цього матеріалу в OpenGL 2.0 та OpenGL 3.x / 4.x - це тепер обов'язкова для основного профілю.
Сучасний OpenGL також може посилатися на нові речі, розміщені в 3.x, 4.x. Такі речі , як масив об'єкти Vertex , FrameBuffer об'єкти , однаковий Buffer Objects / std140 , відбірковий макет , GLSL подпрограммамиі так далі. Багато хто з тих, кого я знайшов, можуть зробити речі набагато приємнішими для програмування. Вони також можуть суттєво змінити загальні трубопроводи двигуна. Це також речі, за допомогою яких можна докласти невеликих зусиль, зробивши допоміжні функції тощо (наприклад, написати загальний об’єкт диспетчера шейдерів, який можна використовувати для встановлення уніформи, якщо UBO підтримуються, інакше керуйте завантаженням значень у шейдери вручну , можливо, покладіть туди трохи шейдерного переписування матеріалів, щоб автоматизувати його). Цей матеріал працює лише на нових відеокартах, ви не бачите будь-яких нетбуків, які його підтримують, або будь-яких консолей відеоігор поточного покоління (вони використовують власний підмножину OpenGL, схожу на OpenGL ES). Останні OSX мають лише 3.
Ультрасучасний наступний OpenGL. Щойно було випущено OpenGL 4.3. Він поставляється з обчислювальними шейдерами, glMultiDrawElementsIndirect та буферами для зберігання шейдерів. Це дозволяє отримати принципово інший конвеєр, де ви завантажуєте всі вершинні дані в GPU, а потім використовуєте обчислювальні шейдери, щоб обчислити, що слід намалювати, а не робити це у вашій програмі. На жаль, це зовсім нове, тому я не знаю жодних гідних навчальних посібників. Погляньте на огляд OpenGL 4.3, який дає змогу описати, як це працює (також автор каже, що має бути випущена стаття GPU Pro, яка пояснює це). Будучи абсолютно новим, на цьому етапі його не підтримуватимуть де-небудь (якщо тільки ви не отримаєте нову картку nvidia з бета-драйверами). Хоча ви, можливо, зможете використовувати OpenCL / CUDA для реалізації деяких з них.
Я б пропустив glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix тощо. Замість цього починайте з вивчення об'єктів Vertex Buffer без шейдерів, не пробуйте 3D в цьому місці просто плоский білий трикутник, щоб вам не довелося працювати з 3D-операціями за допомогою матриць (так як вам потрібно буде навчитися скороти їх до шейдерів, так що немає сенсу вчитись по-старому). Далі додайте в шейдери, вам потрібно буде змінити, як пов’язані ваші вершинні буферні об’єкти, оскільки тепер ви захочете використовувати атрибути вершин. Дізнайтеся, як передавати їм властивості за допомогою форми. Потім вивчіть матричні операції з GLM, прив’яжіть матриці до шейдерів і запускайте 3D. Після того, як ви це зробите, це в основному просто вивчення більш досконалих речей, таких як текстурування,
Деякі загальні онлайн-підручники OpenGL, що охоплюють трубопровід програмування шейдерів, більшість з яких працює з OpenGL 2.0+:
Для інших загальних навчальних ресурсів. OpenGL ES може стати хорошою відправною точкою. OpenGL ES позбавив усіх застарілих речей. OpenGL 4.1 має повну сумісність з OpenGL ES, тому слід мати можливість приймати програму OpenGL ES і запускати її в OpenGL 4.1. І основні принципи для обох однакові.
Деякі речі, що слід зазначити, є те, що OpenGL ES 3.0 щойно випущений, але, оскільки він новий, він ще не матиме жодних навчальних посібників та апаратної підтримки. Здається, не відбулося жодних серйозних фундаментальних змін (як, наприклад, різниця між фіксованим трубопроводом та моделлю шейдерів, що ми спостерігали з OpenGL ES 1.0-> 2.0). Тож ви, мабуть, не будете вивчати будь-які застарілі речі.
Крім того, OpenGL ES часто використовує EGL, тому вам потрібно буде вивчити інший спосіб відкрити вікно, але це не повинно бути занадто важким. В іншому випадку є кілька обгортків / емуляторів OpenGL ES, або ви можете дізнатися на Android / iPhone, якщо у вас є (або подивіться на їх емулятори).
Існує посібник з програмування Addison Wesley OpenGL ES 2.0, який є еквівалентом червоної книги.
Ви також можете переглянути речі, орієнтовані на шейдер GLSL, оскільки саме там живе більшість сучасних OpenGL. Вам просто потрібно переконатися, що те, що ви дізнаєтесь, покриває «клейку» сторону речей, що зв’язує OpenGL.
Перегляньте OpenGL Shading Language 2-е видання (помаранчева книга).
У кулінарній книжці OpenGL 4.0 затінення висвітлюються ще деякі крокові матеріали, що стосуються OpenGL, але самі по собі не є повним навчальним посібником. Це, безумовно, варто ознайомитись, щоб зрозуміти новітні реальні практики OpenGL, такі як єдині об'єкти буфера та підпрограми GLSL.
Нарешті, ви можете подивитися на WebGL, хоча в JavaScript це буде дещо інше та набагато складніше.