Хорошие ресурсы для изучения современного 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-летний опыт разработки ... где я могу найти хороший ресурс ?! Я хочу тратить на это время и хочу глубоко учиться.

MatterGoal
источник

Ответы:

69

Я согласен с вышеупомянутыми книгами с несколькими примечаниями:

  • Восьмое руководство по программированию OpenGL уже вышло и было переделано для современного OpenGL 4.3.

  • SuperBible 5th ed предоставляет вам возможность запустить библиотеку костылей, но, просматривая книгу, вы переопределяете функциональность этой библиотеки, поэтому к концу ее вы должны быть полностью сведущими. Я также настоятельно рекомендую обернуть вещи OpenGL во что-то, если вы используете объектно-ориентированный язык. Я работаю над своей собственной библиотекой для забавы, которая, кажется, является подходящим способом, реализуя ее сам, я понимаю все входы и выходы, и мне нужно только вставить кусочки, которые я на самом деле использую. Кроме того, вы можете абстрагироваться от некоторых вещей, таких как отправка данных в шейдеры (не намного более блестящий), это также может позволить вам перенести некоторые вещи назад, предоставив устаревшие альтернативы. Существует также oglplus .

Основная проблема изучения современного «базового» OpenGL заключается в том, что для запуска и запуска базового конвейера, даже если он просто рисует куб, необходимо понимать следующее:

  • Операции с матрицами (используйте GLM, если вы используете C ++, вам также понадобится версия неофициального SDK MatrixStack OpenGL или моя простая версия здесь ).
  • Программирование шейдеров GLSL.
  • привязка данных к шейдерам и объектам Vertex Buffer. Если вы хотите изучить просто настоящий профиль ядра, все они должны быть реализованы одновременно, а если что-то сломано, вы просто ничего не увидите и почти не поймете, где это пошло не так. Это также не распространяется на такие вещи, как базовое освещение (где вам нужно изучить алгоритмы затенения в дополнение к языку программирования).

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

Другая проблема заключается в том, что «современный» OpenGL действительно может ссылаться на 3 вещи:

  • Первый - это программируемый шейдерный конвейер, а не конвейер с фиксированной функцией. Основные «современные» методы стали возможны с тех пор, как OpenGL 2.0 был выпущен в 2004 году, когда были введены шейдеры (учебники просто не обновлялись), а также 1.5 имели объекты буфера вершин, которые являются еще одним краеугольным камнем современного 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.

  • Ультрасовременный nextgen OpenGL. OpenGL 4.3 был только что выпущен. Он поставляется с вычислительными шейдерами, glMultiDrawElementsIndirect и буферами хранения шейдеров. Это позволяет создать принципиально другой конвейер, в котором вы загружаете все данные вершин в графический процессор, а затем используете вычислительные шейдеры для вычисления того, что должно быть нарисовано, вместо того, чтобы делать это в вашей программе. К сожалению, это очень новое, поэтому я не знаю ни одного достойного учебника по нему. Взгляните на обзор 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 (Оранжевая книга).

Кулинарная книга по языку затенения 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 на Лиспе. Он также полностью свободен от старого способа ведения дел, поэтому вам не нужно беспокоиться о приобретении вредных привычек.

Я хотел бы подчеркнуть, что, хотя это «просто еще один веб-сайт», я не нашел ни одной книги, которая бы давала столь же ясное и краткое объяснение основ, как это.

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

Также для того, чтобы действительно глубоко взглянуть на GLSL, ознакомьтесь с: OpenGL Shader Language (The Orange Book). Я работаю над этим очень медленно, но я дам вам понимание написания шейдеров, чтобы вы могли продолжить эту работу. Я предупреждаю вас, что эта книга, по словам рецензента, содержит «200 страниц высококачественного контента, упакованного в 600-страничную книгу», но дополнительная история и информация могут предоставить контекст, необходимый для понимания маршрутов, которые использует OpenGL. как стандарт понизился (ну, это все равно помогает мне!)

Я надеюсь, что это поможет и удачи, я с нетерпением жду возможности увидеть / сыграть вашу работу в будущем!

ОБНОВИТЬ

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

Кроме того, за несколько лет, прошедших с моего первоначального ответа, learnopengl.com/ стал абсолютно блестящим. Несмотря на то, что я все еще рекомендую arcsynthesis для чистого превосходства его введения в современный opengl, сайт Learnopengl охватывает гораздо больше, чем сделал arcsysthesis, и управляет им с помощью доступного языка, мы создали примеры и открытый исходный код. В принципе, это чертовски хорошо, иди проверь это!

Что касается книг, я не зашел слишком далеко с оранжевой книгой, но могу рекомендовать третье издание «Рендеринга в реальном времени» . Как только вы будете готовы к техническим вещам, эта книга станет золотой жилой.

фасовка
источник
2
О, МОЙ БОГ! первая ссылка фантастическая!
MatterGoal
Сайт gltut больше недоступен, но учебник по-прежнему можно скачать с bitbucket.org/alfonse/gltut/wiki/Home
Арто Бендикен,
Хороший вопрос, я дополню свой пост дополнительными рекомендациями.
Баггерс
8

Также проверьте Open.gl . Он имеет учебники с использованием современного Open GL

anirudhrata
источник
5

Два сайта, которые были очень полезны для меня: http://www.arcsynthesis.org/gltut/ и http://ogldev.atspace.co.uk/

Кроме того, OpenGL wiki - это очень хороший и современный ресурс.

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

Шон
источник
Да, я считаю, что онлайн-уроки гораздо полезнее, чем большинство книг. SuperBible 5-е издание крайне разочаровывает.
Филипп
Сайт gltut больше недоступен, но учебник по-прежнему можно скачать с bitbucket.org/alfonse/gltut/wiki/Home
Арто Бендикен,
4

Лучшая книга, с которой я сталкиваюсь и которая охватывает «современный» OpenGL - это http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Несмотря на то, что это «поваренная книга», она проведет вас через необходимые шаги для настройки рендеринга и того, какие типы сопутствующих библиотек вам понадобятся (библиотека изображений, векторная математика).

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

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

Яри ​​Комппа
источник
Спасибо @Jari. Разве это не «только» о шейдере? Я имею в виду, знакомит ли эта книга с методами OpenGL, а также с шейдерами?
MatterGoal
2
@MatterGoal: Современный OpenGL почти полностью основан на шейдерах. Эта книга охватывает аспекты связывания OpenGL. Я также рекомендую эту книгу, но в качестве дополнения к чему-то другому, она на самом деле не для основной учебной книги, но действительно демонстрирует некоторые отличные применения в реальном мире методов moddrn.
Дэвид С. Бишоп
4

Еще несколько уроков и материалов, которые не были упомянуты, но полезны

Quonux
источник
+1 Чтобы добавить в список, есть учебники OpenGL от Aks, которые не очень структурированы, но имеют достаточно информации для настройки.
legends2k