Хороші ресурси для вивчення сучасного OpenGL (3.0 або новішої версії)? [зачинено]


73

Я натрапляю на пошук хорошого ресурсу, щоб почати з OpenGL (3.0 або новішої версії). Ну, я знайшов багато книг, але жодну з них не можна вважати хорошим ресурсом!

Ось два приклади:

Посібник з програмування OpenGL (7-е видання) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 Це ПОЛНО застарілий матеріал! Практично в кожній главі починається примітка про це.

OpenGL Superbible (5-е видання) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 У цій книзі використовується бібліотека, створена автором для пояснення основних аргументів, приховуючи те, що ви хочете дізнатися! Я не хочу вчитися користуватися вашою бібліотекою! Я хочу навчитися OpenGL!

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

Може хтось направляє мене в правильному напрямку? Я знаю C ++ і маю 10-річний досвід розвитку ... де я можу знайти хороший ресурс ?! Я хочу витратити на це час і хочу глибоко навчитися.

Відповіді:


69

Я згоден щодо вищезазначених книг з кількома нотами:

  • 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 це буде дещо інше та набагато складніше.


3
+1, вау. Єдиною невеликою зміною, яку я б запропонував, було б використовувати вершинні масиви на стороні клієнта на початку, оскільки вони простіший шлях до VBO, але без деяких пасток ведмедя, в які можуть потрапити початківці.
Максим Мінімус

1
Я подумав, що найкраще уникати конкретного навчання / використання застарілої функціональності, оскільки це були б речі, які потрібно було б не вивчити. Інші застарілі речі, які я пропоную використовувати, - це те, що OpenGL буде виконувати за замовчуванням, наприклад, можливість візуалізації без використання шейдера та припущення, що атрибут вершини 0 - це положення, яке повинно вибухнути при переключенні на основний профіль.
Девід К. Єпископ

2
6-е видання SuperBible щойно вийшло, і воно набагато краще, ніж 5-е видання. Я настійно настійно рекомендую це легко прослідкувати та вивчити сучасний OpenGL.
Філіп

2
Сайт Arcsynthesis gltut більше недоступний, але підручник все ще можна завантажити з bitbucket.org/alfonse/gltut/wiki/Home
Арто Бендікен

15

Забудьте про книги принаймні, поки не вийде 8-е видання посібника з програмування.

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


11

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

Спочатку голова тут: http://www.arcsynthesis.org/gltut/ . Цей веб-сайт фантастичний, хороші приклади роботи та глибоке пояснення того, що відбувається. Незважаючи на те, що код написаний на C ++, я використовую це, щоб навчити мене писати демонстрації OpenGL в Lisp. Це також абсолютно не має старого способу ведення справ, тому вам не доведеться турбуватися про підбір шкідливих звичок.

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

Після того, як ви перейдете на веб-сайт вище, ви вже матимете базове розуміння шейдерів, і багато того, що вам потрібно знати, тепер можна переглянути в Google (добре подивіться на ресурси opengl es або webgl, як вони видалили всі застарілі речі) або знайдено на веб-сайті opengl wiki. Пізніше це жахливо, якщо ви не маєте основи з сайту арксинтезу під вашим поясом, але цілком корисно, коли ви приблизно знаєте, що шукаєте.

Також для глибокого погляду на GLSL тоді погляньте на: OpenGL Shader Language (Помаранчева книга) Я працюю над цим дуже повільно, але дам вам розуміння написання шейдерів, щоб дозволити вам продовжувати це заняття. Попереджую, що ця книга, за висловом рецензента, має "200 сторінок вмісту найвищої якості, упакованих у 600-книжкову книгу", але додаткова історія та інформація можуть забезпечити контекст, необхідний для розуміння маршрутів, якими користуються OpenGL як стандарт знизився (ну, це мені все одно допомагає!)

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

ОНОВЛЕННЯ

Здається arcsynthesis, до жаль , відсутня, однак сайт був перетворений в PDF тут і код був дзеркальним тут .

Також за кілька років з моєї оригінальної відповіді Learnopengl.com/ стала абсолютно блискучою. Хоча я все-таки рекомендую аркосинтез для суворої досконалості його впровадження в сучасний opengl, сайт Learnopengl охоплює набагато більше, ніж це зробив аркасистез, і керує ним доступною мовою, ми створили приклади та відкритий вихідний код. В основному, це чортово добре, іди перевірити!

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


2
О БОЖЕ МІЙ! перше посилання фантастичне!
MatterGoal

Сайт gltut більше недоступний, але підручник все ще можна завантажити з bitbucket.org/alfonse/gltut/wiki/Home
Арто Бендікен

Хороший момент, я також оновлю свою публікацію додатковими рекомендаціями.
Баггери


5

Два корисні для мене сайти: http://www.arcsynthesis.org/gltut/ та http://ogldev.atspace.co.uk/

Також вікі OpenGL - надзвичайно хороший та сучасний ресурс.

Після того, як ви пройдете їх, настійно рекомендую кусати кулю і прочитати специфікацію OpenGL. Тоді ви будете професіоналом.


Так, я вважаю, що онлайн-підручники є набагато кориснішими, ніж більшість книг. 5-е видання SuperBible надзвичайно розчаровує.
Філіп

Сайт gltut більше недоступний, але підручник все ще можна завантажити з bitbucket.org/alfonse/gltut/wiki/Home
Арто Бендікен

4

Найкраща книга, яку я натрапила на тему "Сучасний" OpenGL - це http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Незважаючи на те, що це "кулінарна книга", вона проводить вас через необхідні кроки, щоб налаштувати візуалізацію та які бібліотеки-супутники вам знадобляться (lib image, veb математика lib).

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

Я також рекомендую отримати книгу помаранчевого кольору.


Дякую @Jari. Це не "лише" шейдер? Я маю на увазі, чи ця книга знайомиться з методами OpenGL, а також шейдерами?
MatterGoal

2
@MatterGoal: Сучасний OpenGL майже повністю базується на шейдері. Ця книга висвітлює обов'язкові сторони речей OpenGL. Я також рекомендую цю книгу, але як супутник чомусь іншому, вона насправді не є основною навчальною книгою, але демонструє великі використання реальних практик moddrn у реальному світі.
Давид К. Єпископ

4

Ще кілька підручників та матеріалів, які не згадувались, але були корисними


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