Можна багато чому навчитися. Ось моя думка про кожного, з погляду когось нового в OpenGL.
Приклади OpenGL
Там є багато прикладу коду, який ви можете прочитати. Приклади G-truc досить великі та охоплюють безліч вдосконалених функцій.
Однак якщо ви новачок , навчання на прикладах - це жахливий спосіб вчитися. Читання коду, який ви насправді не розумієте, не навчить вас, чому він працює. Дійсно, у тексті на вищезгаданій зв’язаній сторінці конкретно і правильно зазначено, що приклади не для початківців.
Навчитися з голого вихідного коду, якщо тільки це не коментується (в який момент це підручник) - справа непроста. Спроба зробити це заохочує програмування культового культавого стилю та кодування копіювання та вставки. Дуже легко переконати себе, що ти розумієш, як щось працює, коли все, що ти насправді робиш, - це просто копіювання коду з одного місця в інше. Можливо, ви зможете змішувати і співставляти речі, але справжнього розуміння важко досягти без належного інструктивного матеріалу.
Книги OpenGL
Існує досить багато фактично придбаних книг для розробки OpenGL. Я висвітлю свої думки щодо двох найбільших тут.
OpenGL Redbook
Це є дещо проблематичним з чисто практичної точки зору. Дивіться, 7-е видання охоплює GL 3.0 та 3.1. Який досить старий. З тих пір у OpenGL було додано багато корисних функцій, які змінюють спосіб написання речей. І не всі вони є апаратними функціями.
8-е видання виходить "скоро" і охоплюватиме 4.1. Немає жодного слова про те, чи охоплює він старі речі з фіксованою функцією.
Я б сказав, що з цією книгою все в порядку. Найбільша проблема з цим - організація інформації. Це більше схоже на всебічний довідковий посібник, ніж на книгу, зроблену для навчання. Ось що я маю на увазі.
Однією з найважливіших речей, яку слід робити при навчанні, є не перевантажувати учня неважливою інформацією. Але Redbook робить саме це. Вводячи матеріал, він вносить багато матеріалу. Значна частина цього є зайвим перед завданням.
Те, про що ви говорите, і коли ви про це говорите, має вирішальне значення для того, щоб зробити книгу хорошим навчальним ресурсом. Redbook ніколи не стримує інформацію до відповідного часу. Коли він розповідає про те, як намалювати трикутники та примітиви, він розповідає про все про їх малювання, і все відразу. Він охоплює кожен параметр, кожну функцію, кожен параметр тощо.
Це просто непогана організація інформації.
OpenGL Superbible
П’яте видання цієї книги охоплює лише ядро GL 3.x, тому немає фіксованої функції.
Однак загальна організація книги більш-менш ідентична організації четвертої версії видання. Це здається неможливим, оскільки 4-е видання використовувало фіксовану функцію і не вводило шейдери набагато пізніше.
Це було досягнуто моєю скаргою №1 на книгу. По суті, автор побудував бібліотеку, яка реалізує форму OpenGL з фіксованою функцією. Він обертає VAO, буферні об’єкти, шейдери та інші інші речі, щоб він міг потрапити на малювання об'єктів, матричну математику та текстури, не розмовляючи про речі на зразок того, як працює трубопровід GL.
Приховуючи всі ці деталі, це полегшує засвоювання матеріалу. Але ви часто будете бачити людей, що йдуть від Супербіблі, не знаючи, як насправді функціонувати без бібліотеки. Вони насправді не розуміють, як шейдери підключаються до буферних об'єктів, як дані протікають по конвеєру тощо.
Це справна книга, більше того, ніж Червона книга. Якщо все інше не вдасться, це зробить роботу. Але я думаю, що може бути і краще.
Крім того, на думку деяких рецензентів, схоже, не вистачає певної корисної інформації, наприклад упаковки даних атрибутів із використанням нормованих значень тощо.
Інтернет-матеріали OpenGL
Існує багато інтернет-матеріалів, з яких можна було б дізнатися.
Підручники NeHe
Навчальні програми NeHe , як заявили інші, надзвичайно застаріли. Вони орієнтуються на OpenGL з фіксованою функцією. Часто зазначається, що вивчити GL з фіксованою функцією легко, що правда. Але це не робить його гарною ідеєю.
Важко зрозуміти, як справді працює трубопровід фіксованої функції . Я б пішов так далеко, щоб сказати, що важче, ніж вивчати шейдери. Як тільки ви це отримаєте, шейдери прості. Розуміння тонкощів текстурного середовища, комбайнерів та іншого - дуже складне і вимагає частого відвідування довідкових документів, щоб переконатися, що все налаштовано правильно. Навіть якщо ви все правильно розумієте, легко зробити невелику помилку, яка змушує все зламатися.
Різниця полягає в тому, що ви можете змусити працювати з фіксованою функцією, не розуміючи цього. Це заохочує програмування культового культу. Це дає можливість отримати щось на екрані, не знаючи, що хтось робить. На форумах OpenGL.org ми постійно бачимо питання про деталі довкілля з фіксованою функцією, від людей, які не знають, як працює gluLookAt, до труднощів із освітленням, до людей, які намагаються отримати певний ефект для роботи з текстурним середовищем.
Так що ні, я не думаю, що NeHe - це хороший спосіб вивчити OpenGL.
Наведений вище коментар може бути використаний для будь-якого навчального посібника, що не базується на шейдерах , наприклад, Swiftless , Lighthouse тощо.
OpenGL програмування Wikibook
Wikibook Програмування OpenGL , ймовірно, сучасний еквівалент NeHe. Він охоплює GL версії 2.1, оскільки вони хочуть підтримувати його для мобільних платформ. Якщо це для вас важливо, то будь-ласка, дивіться тут.
Інша проблема з NeHe, а отже, і з цією Wikibook - це велика увага до вихідного коду. Відношення тексту до коду дуже мало; коду дуже багато , але текст насправді не пояснює, як це все працює.
Як приклад, подивіться внизу підручника 2. У ньому введено змішування. Це не говорить про те, як працює суміш. Це не говорить про те, що glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
насправді означає чи робить. Це просто говорить: "Ось якийсь код, який робить речі прозорими".
Це не найкраще середовище для навчання.
Неповні підручники
Swiftless має набір OpenGL 4.x підручники . Durian Software також має кілька підручників OpenGL на основі шейдерів . І є підручники "OpenGLBook.com" .
Те, що у них є спільним, - це те, що вони неповні та кинуті. Всі вони отримали близько 4-5 навчальних посібників, а потім були відпущені. Жодна з них не дійшла до текстурування, освітлення чи подібного. Ну, Дуріан вдарив текстуру, але не освітлення.
Багато з них можна поглянути, але і цього багато чого не вистачає.
Безсоромна самореклама
Перегляд моїх власних навчальних посібників із сучасної 3D графіки був би жахливим конфліктом інтересів. Тому замість цього я детально розповім про організацію, яка стоїть за ними, і чому я думаю, що вони хороші.
Так і так, я працюю над Підручником 17. Проект не загинув.
Перші три глави дійсно про те, як дізнатися, як працює трубопровід OpenGL. Superbible не вдався, тому що він намагався приховати деталі. Натомість я намагаюся пояснити ці деталі справді, дуже добре. Неодноразово. Вступ пояснює конвеєр простим текстом. Перший підручник пояснює це супровідним кодом. А другий підручник відвідує його ще більше.
Звідти я, природно, переходжу до позиціонування об'єктів. Це вводить уніформу, але я не хотів заклинювати форму і перспективну проекцію одночасно. Тому я розділив два поняття. Після проекції наступний крок здавався розумним буферизацією, після чого слід працювати як перетворення та матриці. Після цього камери. Ротація з кватерніонами була пізньою доповненням, але я вважаю, що важливо було поговорити для початківця графічного програміста.
Підручники з освітлення знову будують одне на інше. Дифузне, потім пергаментне освітлення, потім дзеркальне. Динамічний діапазон був цікавим вибором. Більшість вступних матеріалів намагаються утриматися від цього, але я його сприймаю. Ви сьогодні не графічний програміст, якщо вважаєте, що інтенсивність світла завжди знаходиться в діапазоні [0, 1]. І ви сьогодні не графічний програміст, якщо не знаєте, як підтримувати лінійний кольоровий конвеєр.
Останній у висвітленні, на саморобках, був дивним. Я намагаюся створити підручники, які вирішують проблеми, а не просто показують деякі функції OpenGL, особливо, коли книга продовжується. Так багато мого дизайну підручників походить від пошуку способів поговорити на певні теми, при цьому все ще роблячи їх справжніми питаннями, а не очевидними, "ми навчаємось X зараз". Шейдери для геометрії є важким, тому що вони насправді не вирішують дуже багато проблем.
Імпозанти представляли проблему, яку GS справді були корисні для вирішення. Крім того, це дозволило мені поговорити про інші менш вживані речі, такі як discard
і зміна глибини фрагмента. І це дійсно показує силу шейдерів: ви можете зробити плоский квадрат стати сферою.
Цікаві також навчальні посібники з текстурування. Однією з причин я відклав розмови про розмиті кольорові текстури до третьої - це на деякий час перестати говорити про текстури sRGB. Таким чином, я міг би говорити про основні проблеми навколо текстур (завантаження даних, розміщення їх у шейдерах, фільтрування, затискання тощо), не маючи справу з лінійними проблемами. Тоді я міг би провести цілий підручник саме на цю тему. Це дозволило мені дуже, дуже підкреслити, наскільки важливим є підтримка лінійного кольоропроводу.
Це один з моїх домашніх улюбленців.