Які хороші навчальні ресурси для OpenGL? [зачинено]


88

Я вже деякий час використовую OpenGL ES на iPhone, і в основному я відчуваю себе досить втраченим назовні невеликим набором команд, які я бачив у прикладах і прийнятих як свої. Я б хотів використовувати OpenGL на інших платформах і добре розумію це.

Кожен раз, коли я шукаю книгу, я виявляю це ВЕЛИЧЕЗНІ біблії, які здаються нецікавим і дуже важким для початківця. Якби у мене було кілька вихідних, щоб витратити на вивчення OpenGL, що було б найкращим способом витратити свій час (і гроші)?


12
Я ненавиджу це говорити, але OpenGL Superbible або OpenGL Redbook - найкращий спосіб вивчити OpenGL. Це складна тема, тому книгу потрібно бути великою.
Рейчел Блюм

6
Це доступно навіть для новачків?
DFectuoso

Відповіді:


36

Будьте обережні, дивлячись на підручники OpenGL, адже багато з них (NeHe) просто вчать вас тим, чого ви більше не повинні робити. Сьогодні OpenGL - це інший звір, який був 10 років тому.

Деякі приємні приклади уникнення застарілих речей можна знайти тут: http://www.g-truc.net/post-tech-content-sample.html

OpenGL Samples Pack 4.0.1.0 - це оновлення, яке приводить кількість зразків до загальної кількості 58 зразків; включаючи 13 зразків OpenGL 4, 33 зразка OpenGL 3.3 та 12 зразків OpenGL 2 для Visual Studio 2008 та 2010 у 32 та 64 бітах.


Це зв'язок з горою!
користувач14170

65

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

Це один з моїх домашніх улюбленців.


1
Я щойно почав читати вашу книгу / вихідний код, і це неймовірно .. дякую тобі, що випустили це безкоштовно!
Алекс Коплан

Хоча я хлопець з телекомунікацій, просто намагаюся спробувати ваші підручники. І вони справді приємні для новачка. Єдине, що неофіційний sdk opengl не належним чином будується за допомогою Ubuntu12.04 + Eclipse. Чи є спосіб, за допомогою якого ми можемо безпосередньо встановити його (як це робимо для GL, GLEW, GLU, glut тощо)
iammilind

@iammilind: " неправильно будується " Як збірка не працює? Крім того, немає "встановлення"; це половина пункту. Це механізм копіювання / перемоги / та запуску без будь-яких системних установок, залежностей, PPM або будь-яких інших речей, які я не розумію або не маю уявлення як використовувати в Linux. Ви розміщуєте його там, де хочете, а не там, де ваша система думає, що це повинно йти.
Нікол Болас

1
На жаль, на Ubuntu, на жаль, процес збирання не вдається на preamakeсамому етапі :( ... Це буде дуже корисно, якщо у вільний час ви зможете спробувати виконати підручники з кодом за допомогою Ubuntu + Eclipse. Поки що інший спосіб я дотримуюся це використовувати матеріал для читання, який ви надали, і пов'язуючи це з деякими іншими навчальними посібниками з коду. Причиною є те, що я бачив "арксинтез" найкращим місцем в Інтернеті дотепер для навчання початківців OpenGL
iammilind

@iammilind: Я помітив, що ви не подали звіт про помилку. Як ви очікуєте, що ці речі виправляться без жодної?
Нікол Болас


8

Моя єдина книга на OpenGL - "OpenGL SuperBible, 4-е видання", а 5-е вийде вже через кілька тижнів. Я думаю, що це добре як для початківців, так і для просунутих програмістів.

Редагувати: я можу додати, що не піти на новітні тенденції технології, якщо ви просто навчитесь програмувати. Швидше за все, коли ви станете експертом, використовуючи одну методологію, 5 нових інтерфейсів / версій, щойно випущених. Ми бачимо, що шейдери просуваються кожні 3 місяці, здається. Тому виберіть найкращу документацію (як правило, примітиви), зробіть кілька програм і поступово просувайтесь, тому що більш ніж ймовірно, ви в майбутньому наткнетеся на старіший код. Сподіваюся, це допомагає!


Я зараз переживаю чудове, і це дійсно добре для людей, які не мають графічного тла, оскільки це пояснює всі поняття, як ти йдеш далі.
Spidey

5

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

Велике питання, з яким я стикався, - це багато речей, які там були випущені в останній версії OpenGL.

Найкращий ресурс, який мені вдалося знайти, був у блозі Джо . Це найкраще, щоб представити сучасний конвеєр і провести вас через деякі приклади з більш читабельним способом, ніж те, що мені вдалося знайти в іншому місці. Здається, Нее нещодавно отримує оновлену пару, і хоча їх уроки ще старі, деякі новини можуть зацікавити. Lazy Foo ' також був чудовим ресурсом, але, як і Nehe, в його навчальних посібниках використовується відмовлений матеріал.

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



3

Найкращий спосіб дізнатися OpenGL - це використовувати його. Я б рекомендував написати власний двигун. Це може здатися важким завданням, і воно є. Ваш перший двигун буде не дуже хорошим, але ви багато чого навчилися.

В основному: напишіть двигун, використовуйте його для гри, з’ясуйте, що вам не подобається, і перепишіть його. Продовжуйте це робити, і вам стане краще в OpenGL. :)

Що вам знадобиться:

  • Деякі способи завантаження моделей (.obj)
  • Якийсь спосіб завантаження текстур
  • Освітлення або в трубопроводі з фіксованою функцією, або в шейдері
  • Для будь-яких трохи складніших сцен, ніж чайник на екрані, графік сцени
  • Багато крихітних інструментів (3d векторний клас, клас кватерніона, клас камери, менеджер сцени тощо)

Це вже велика робота.


Не могли б ви вказати мені будь-яку документацію про базову архітектуру або компоненти, які повинен мати "перший двигун"? Насправді це може здатися гарним способом забруднити руки при відкритій гл ...
DFectuoso

gamedev.net/reference/list.asp?categoryid=45#200 Стаття "Енергійність".
Егон

4
-1 Написання двигунів як спосіб потрапити в gamedev не дуже добре. Наприклад, ви не знаєте, що поставити в двигун. scientificninja.com/blog/write-games-not-engines
Комуністична качка

@TheCommunistDuck SADLY, наунінінга більше немає. web.archive посилання
bobobobo

2

Я дізнався opengl, написавши "просту" гру: 3D Tetris !

Спробуйте створити власну просту гру / додаток:

  • Астероїди
  • Понг
  • Простий бічний скроллер (ви можете навчитися завантажувати в моделі гравця / ворогів. У вас немає? Використовуйте моделі Quake)
  • 3d генератор рельєфу

Зробіть щось просте, що вас цікавить!


2

Ми робимо деякі OpenGL (ES) в нашій грі Orchard's Craps для iPhone, але ним керував програміст з божевільною 3D-майстерністю. Отже, через це я вивчив OpenGL (ES), щоб я знав, про що я говорю, і щоб я міг кодувати разом із командою.

Один із сайтів, які мені здаються корисними, із серією навчальних посібників - це блог Джеффа Ламарша: http://iphonedevelopment.blogspot.com, і ось посилання на його публікації на OpenGL: http://iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html

А з OpenGL.org є ці два корисні посилання: http://www.opengl.org/code/ та http://www.opengl.org/resources/features/

Найкращий спосіб був зазначений вище кілька разів. Заскакуйте і робіть щось маленьке, що цікаво, і працюйте своїм шляхом вгору. Вся справа в розумінні сцени, камери та матеріалів (шейдерів). Після того, як ви обернетеся цими поняттями, ви можете почати розглядати двигуни фізики, виявлення зіткнень, ефекти частинок тощо. Вуто! (^_^)

Успіхів у всіх ваших починаннях, Кевін


2

Ну, ніхто не говорив про посібник з програмування OpenGL , я не маю цього видання, але старіші були досить непогані.


1
Розкажи мені про це, будь ласка. Цікаво, як це краще / відрізняється від супер Біблії, і чи варто витрачати час, який варто прочитати такі великі книги (не ображаюсь, але якщо на читання книги потрібно 20+ годин, я хочу бути впевненим, що це варто =))
DFectuoso


2

http://www.opengl-tutorial.org/

Має підручники для 'сучасного' OpenGL (3.0 / 4.0 ядра, наприклад, не викладається застарілий матеріал (наприклад, glBegin / glEnd)). Хоча підручники використовують шейдери, основи пояснюються дуже докладно, будуючи міцний математичний фундамент на цьому шляху. Текст добре закруглюється зразками коду * та корисними візуалізаціями.

Проміжні навчальні посібники охоплюють такі речі, як, наприклад, використання кватерніонів або світлих карт .

. * glm використовується як математична бібліотека


1

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

Посібники та навчальні посібники дійсно нудні без більшого контексту - тобто щось поза навчальним посібником, якого ви хочете досягти самостійно.


-1

Почніть з NeHe, щоб швидко отримати перший трикутник на екрані. Зробіть кілька навчальних посібників для початківців, щоб зрозуміти основні поняття 3D-програмування. Якщо ви, маючи на увазі, згадуючи OpenGL ES, ви вже знаєте основи тривимірного програмування (що таке матриці, для чого вони використовуються, як різні матриці використовуються для проектування вершин на екрані, які вершини тощо), то я пропоную вам взагалі не витрачати час на NeHe, тому що це може сповільнити вас (навчивши вас речам, які ви повинні "вивчити" згодом).

Крім того, я погоджуюся, що найкращий спосіб дізнатися це - виконуючи. Хорошим першим непривітним проектом може стати 2D-гра (або 2D-ігровий двигун). Використання сучасних програм OpenGL для 2D-програм може навчити вас багатьом відповідним концепціям (наприклад, використання буфера та шейдерів), і це буде менш грізно, ніж 3D-проект. Потім, ви можете застосувати те, що ви навчилися, роблячи 3D-додаток.


NeHe застарів. Крім того, хоча створення мистецтва простіше, і ви здебільшого маєте справу з фактурними квадратиками, є багато кутових справ (наприклад, векторний перехресний виріб), які ускладнюють написання двовимірної гри перед тим, як писати 3D-гру. Ігри з 3D-графікою, але 2D-геймплей (наприклад, Pong, Breakout, ...) можуть бути простішими, ніж чисті 2D / 3D-ігри.
Exilyth

-4

Ну, мені знову і знову говорили, що підручники Нехе найкращі, я думаю, вони теж підходять для вас! http://nehe.gamedev.net/ Я купив червону книгу ...


Це здається веселим набором невеликих шматочків від нуля до чудового місця, дякую!
DFectuoso

2
Я мушу категорично не погодитися. Так, підручники NeHe існують давно, але вони ніколи не мали дуже гарного стилю, і вони вже досить застаріли.
Андреас

8
-1 Нехе занадто застарілий.
Аксель Гнейтінг

7
-1. Дізналися всілякі погані речі від nehe!
Габріель Ізенберг,

-1. NeHe має позначати свої підручники як застарілі та застарілі.
Куазі Ірфан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.