Какие хорошие учебные ресурсы для OpenGL? [закрыто]


88

Я уже некоторое время использую OpenGL ES на iPhone, и в основном чувствую себя потерянным из-за небольшого набора команд, которые я видел в примерах и принял как свои собственные. Я хотел бы использовать OpenGL на других платформах и иметь хорошее понимание этого.

Каждый раз, когда я ищу книгу, я нахожу эти ОГРОМНЫЕ библии, которые кажутся неинтересными и очень трудными для новичка. Если бы у меня было несколько выходных, чтобы потратить на изучение OpenGL, что было бы лучшим способом потратить мое время (и деньги)?


12
Я ненавижу это говорить, но OpenGL Superbible или RedGL - лучший способ изучить 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 битах.


Это связано с горой!
user14170

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 в деталях.

Скрывая все эти детали, он облегчает усвоение материала. Но вы часто будете видеть, как люди уходят из Superbible, не зная, как на самом деле функционировать без библиотеки. Они не совсем понимают, как шейдеры подключаются к объектам буфера, как данные передаются по конвейеру и т. Д.

Это исправная книга, а не Красная книга. Если все остальное терпит неудачу, это сделает работу. Но я думаю, что это может быть лучше.

Кроме того, по мнению некоторых обозревателей, кажется, что отсутствует определенная полезная информация, такая как упаковка атрибутных данных с использованием нормализованных значений и тому подобное.

OpenGL Интернет-материалы

Есть много онлайн-материалов, из которых можно поучиться.

Учебники NeHe

Учебные пособия NeHe , как утверждают другие, крайне устарели. Они сосредоточены на фиксированной функции OpenGL. Часто утверждается, что легко изучить GL с фиксированной функцией, что верно. Но это не делает это хорошей идеей.

Понимание того, как фиксированная функция трубопровод действительно работает трудно. Я бы сказал, что это сложнее, чем изучать шейдеры. Как только вы это получите, шейдеры просты. Понимание тонкостей текстурного окружения, объединителей и еще чего-то очень сложное и требует частых посещений справочных документов, чтобы убедиться, что все настроено правильно. Даже если вы все правильно понимаете, легко совершить небольшую ошибку, которая все сломает.

Разница в том, что вы можете заставить работать фиксированные функции, не понимая этого. Это поощряет программирование культа грузов. Это позволяет получить что-то на экране, даже не зная, что он делает. На форумах OpenGL.org мы постоянно видим вопросы о мелочах, связанных с фиксированной функцией, от людей, не знающих, как работает gluLookAt, до проблем с освещением, до людей, пытающихся получить какой-то определенный эффект для работы с текстурной средой.

Так что нет, я не думаю, что NeHe - это хороший способ изучить OpenGL.

Приведенный выше комментарий может быть использован для любого не основанного на шейдере учебника, такого как Swiftless , Lighthouse и так далее.

Wikibook's OpenGL Программирование

Wikibook OpenGL Programming , вероятно, является современным эквивалентом 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. Супербибле не удалось, потому что он пытался скрыть детали. Вместо этого я пытаюсь объяснить эти детали действительно, очень хорошо. Несколько раз. Введение объясняет конвейер в виде простого текста. Первый урок объясняет это сопровождением кода. И второй урок посещает его еще больше.

Оттуда я естественно перехожу к позиционированию объектов. Это вводит униформу, но я не хотел смешивать униформу и перспективную проекцию одновременно. Итак, я разделил две концепции. После проекции буферизация глубины казалась разумным следующим шагом, за которым следовало, как работают преобразования и матрицы. После этого камеры. Вращение с кватернионами было поздним дополнением, но я чувствую, что для начинающего графического программиста важно поговорить об этом.

Учебники по освещению снова строят одно на другом. Диффузное, затем осветительное, затем зеркальное. Динамический диапазон был интересным выбором. Большинство вводных материалов пытается держаться подальше от этого, но я принимаю это. Вы не программист графики в наши дни, если думаете, что интенсивность света всегда находится в диапазоне [0, 1]. И вы не программист графики, если вы не знаете, как поддерживать линейный конвейер цвета.

Последний в освещении, на самозванцах, был странным. Я стараюсь разрабатывать учебники, которые решают проблемы, а не просто показывают некоторые функции OpenGL, особенно по мере продвижения книги. Большая часть моего учебного проекта основана на поиске способов говорить на определенные темы, в то же время делая их реальными проблемами, а не очевидными: «Мы изучаем X сейчас». Геометрические шейдеры сложны, потому что они не решают много проблем.

Самозванцы представляли проблему, которую GS действительно помогли решить. Кроме того, это позволило мне говорить о других менее используемых вещах, таких как discardи изменение глубины фрагмента. И это действительно показывает силу шейдеров: вы можете сделать плоский квадрат сферой.

Уроки текстурирования также интересны. Одна из причин, по которой я откладывал разговоры о диффузных цветных текстурах, пока третья заключалась в том, чтобы некоторое время не говорить о текстурах sRGB. Таким образом, я мог бы говорить об основных проблемах, связанных с текстурами (загрузка данных, размещение их в шейдерах, фильтрация, фиксация и т. Д.) Без необходимости решать линейные проблемы. Тогда я мог бы провести целый урок только на эту тему. Это позволило мне действительно, действительно подчеркнуть, насколько важно поддерживать линейный цветовой конвейер.

Это одна из моих любимых мозолей.


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

Несмотря на то, что я парень в области телекоммуникаций, я просто пробовал ваши уроки. И они действительно хороши для новичка. Единственное, что неофициальный OpenGL SDK не может быть правильно собран с Ubuntu12.04 + Eclipse. Есть ли способ, с помощью которого мы можем установить его напрямую (как мы это делаем для GL, GLEW, GLU, glut и т. Д.)
iammilind

@iammilind: « неправильно собрана » Как сбой сборки? Также нет «установки»; это половина дела. Это механизм копирования / предварительного создания и запуска без каких-либо системных установок, зависимостей, PPM или любого другого, чего я не понимаю или не имею представления о том, как использовать в Linux. Вы помещаете его туда, куда хотите, а не туда, где ваша система считает, что он должен идти.
Николь Болас

1
К сожалению, в Ubuntu процесс сборки завершается неудачей на preamakeсамой стадии :( ... Это будет очень полезно, если в свободное время вы можете попытаться выполнить учебные курсы по коду с помощью Ubuntu + Eclipse. А пока другим способом я следую состоит в том, чтобы использовать предоставленный вами материал для чтения и связать его с некоторыми другими учебными пособиями по коду. Причина в том, что я видел "arcsynthesis" лучшее место в Интернете до сих пор для обучения новичков OpenGL.
iammilind

@iammilind: я заметил, что вы не подали отчет об ошибке. Как вы ожидаете, что эти вещи будут исправлены без такового?
Николь Болас


8

Моя единственная книга по OpenGL - «OpenGL SuperBible, 4-е издание», а 5-е издание будет выпущено через несколько недель. Я думаю, что это хорошо как для начинающих, так и для продвинутых программистов.

Изменить: я мог бы добавить, не идти на последние тенденции технологии, если вы только учитесь программировать. Скорее всего, когда вы станете экспертом, используя одну методологию, только что выпущено 5 новых интерфейсов / версий. Кажется, мы видели, как шейдеры продвигаются каждые 3 месяца. Так что выбирайте лучшую документацию (обычно примитивы), создавайте несколько программ и постепенно продвигайтесь вперед, потому что, скорее всего, вы столкнетесь со старым кодом в будущем. Надеюсь, это поможет!


Сейчас я прохожу супер-библию, и она действительно хороша для людей, у которых нет графического фона, так как она объясняет все концепции по мере продвижения.
Spidey

5

Как обычно, лучший способ научиться это делать. Я бы не стал тратить деньги, если вы не чувствуете, что вам действительно полезно иметь учебник для чтения, большую часть (если не всю) информацию можно найти в Интернете. Помимо изучения OpenGL, вы также можете освежить свою линейную алгебру, это никогда не повредит.

Большая проблема, с которой я столкнулся, заключается в том, что в последней версии OpenGL было исключено множество вещей.

Лучший ресурс, который мне удалось найти, был в блоге Джо . Лучше всего представить современный конвейер и познакомить вас с некоторыми примерами в более удобочитаемой форме, чем то, что я смог найти в другом месте. Похоже, что Нехе недавно обновлял пару, и, хотя их уроки еще старые, некоторые новости могут представлять интерес. Lazy Foo ' также был отличным ресурсом, но, как и в Nehe, в его уроках используется разрозненный материал.

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



3

Лучший способ изучить OpenGL - это использовать его. Я бы порекомендовал написать свой собственный движок. Это может показаться сложной задачей, и это так. Ваш первый двигатель не будет очень хорошим, но вы многому научитесь.

В основном: напишите движок, используйте его для игры, выясните, что вам не нравится в нем, и перепишите его. Продолжайте делать это, и вы станете лучше в OpenGL. :)

Что тебе понадобится:

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

Это уже много работы.


Не могли бы вы указать мне какую-либо документацию по базовой архитектуре или компонентам, которые должен иметь «первый движок»? На самом деле это может показаться хорошим способом испачкать мои руки с открытым
блеском


4
-1 Писать движки как способ попасть в gamedev не очень хорошо. Например, вы не знаете, что добавить в двигатель. Scientificninja.com/blog/write-games-not-engines
Коммунистическая утка

@ TheCommunistDuck SADLY, Scientificninja больше не существует. ссылка на
веб-архив

2

Я изучил opengl, написав «простую» игру: 3D Tetris !

Попробуйте создать свою собственную простую игру / приложение:

  • Астероиды
  • Pong
  • Простой боковой скроллер (вы можете научиться загружать модели для игрока / врагов. У вас их нет? Используйте модели Quake)
  • 3d генератор местности

Сделайте что-нибудь простое, что вас интересует!


2

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

Один сайт, который я нашел полезным, с серией учебных пособий, - это блог Джеффа Ламарша: http://iphonedevelopment.blogspot.com, и вот ссылка на его сообщения OpenGL: http://iphonedevelopment.blogspot.com/2009/05/ OpenGL-эс-из-измельченного стола-of.html

А из OpenGL.org есть две полезные ссылки: http://www.opengl.org/code/ и http://www.opengl.org/resources/features/.

Лучший способ, был изложен выше несколько раз. Прыгай и делай что-нибудь маленькое, это интересно, и продвигайся вверх. Все дело в понимании сцены, камеры и материалов (шейдеров). Разобравшись с этими понятиями, вы можете начать изучать физические движки, обнаружение столкновений, эффекты частиц и тому подобное. Woot! (^_^)

Удачи во всех твоих начинаниях, Кевин


2

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


1
Расскажи мне больше об этом, пожалуйста. Интересно, чем это лучше / отличается от супер-библии и стоит ли время того, чтобы читать такие большие книги (без обид, но если чтение книги занимает более 20 часов, я хочу быть уверенным, что оно того стоит =))
DFectuoso


2

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

Имеет учебники по «современному» OpenGL (ядро 3.0 / 4.0, например, нет устаревших вещей (таких как glBegin / glEnd). Хотя в учебниках используются шейдеры, основы объясняются очень подробно, на этом пути создается прочная математическая основа. Текст хорошо округлен с примерами кода * и полезными визуализациями.

Промежуточные уроки охватывают такие вещи, как, например, использование Quaternions или Lightmaps .

. * GLM используется в качестве математической библиотеки


1

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

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


-1

Начните с NeHe, чтобы быстро получить свой первый треугольник на экране. Сделайте несколько уроков для начинающих, чтобы понять основные концепции 3D-программирования. Если, как вы подразумеваете, упоминая OpenGL ES, вы уже знаете основы трехмерного программирования (что такое матрицы, для чего они используются, как используются разные матрицы для проецирования вершин на экране, что такое вершины и т. Д.), тогда я предлагаю вам вообще не тратить время на NeHe, потому что это может замедлить вас (обучая вас вещам, которые вы должны «разучить» позже).

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


Не устарел. Кроме того, хотя создание художественных произведений проще, и вы в основном имеете дело с текстурированными квадратами, существует множество угловых случаев (например, векторное перекрестное произведение), которые затрудняют написание 2D-игры перед написанием 3D-игры. Игры с 3D-графикой, но 2D-геймплеем (например, Pong, Breakout, ...) могут быть проще, чем чистые 2D / 3D-игры.
Exilyth

-4

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


Это похоже на забавный набор маленьких кусочков от нуля до отличного места, спасибо!
DFectuoso

2
Я должен категорически не согласиться. Да, уроки NeHe были там долгое время, но у них никогда не было очень хорошего стиля, и они к настоящему времени уже устарели.
Андреас

8
-1 Нехе слишком устарел.
Аксель Гнейтинг

7
-1. Узнал все виды плохих вещей от Нехе!
Габриэль Изенберг

-1. NeHe следует обозначить свои учебники как устаревшие и устаревшие.
Quazi Irfan
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.