Хорошие ресурсы для изучения современного OpenGL (3.0 или новее)? [закрыто]

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

71 голос | спросил MatterGoal 1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

7 ответов


68

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

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

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

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

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

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

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

  • Первая из них - программируемая шейдерная линия, а не конвейер фиксированной функции. Ядро «современных» технологий стало возможным благодаря тому, что OpenGL 2.0 был выпущен в 2004 году, когда шейдеры, где они были введены (учебные пособия просто не обновились), также имели Vertex Buffer Objects, которые являются еще одним краеугольным камнем современного 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. Такие вещи, как объекты вершинного массива , Объекты Framebuffer , Единые объекты буфера / std140 , отборочные макеты , подпрограммы GLSL и т. д. Многие из тех, кого я нашел, могут сделать намного более приятным для программирования. Они также могут тонко менять общие конвейеры двигателя. Это также те вещи, которые с небольшими усилиями можно выполнить с помощью вспомогательных функций и т. Д. (Например, напишите общий объект диспетчера шейдеров, который вы можете использовать для установки униформы, если поддерживаются UBOs, которые иначе управляют загрузкой значений в шейдеры вручную , может быть, положить немного shader переписывания материала там, чтобы автоматизировать его). Этот материал работает только на новых видеокартах, вы не увидите никаких нетбуков, поддерживающих его, или каких-либо консолей видеоигр текущего поколения (они используют свой собственный поднабор OpenGL, похожий на OpenGL ES). У последней версии OSX есть только поддержка 3.2, и я понимаю, что они будут исправлены в этой версии навсегда, так как Apple будет писать свои графические драйверы и указать версии OpenGL на основе версии ОС, а не возможности GFX-драйверов /видеокарты, единственный способ для пользователя получить новый OpenGL на текущем поколении Mac должен будет заплатить за обновление до новой версии OSX.

  • The Ultra Modern nextgen OpenGL. OpenGL 4.3 был только что выпущен. Он поставляется с вычислительными шейдерами, glMultiDrawElementsIndirect и буферами хранения шейдеров. Это позволяет создать принципиально другой конвейер, в котором вы загружаете все данные вершин в графический процессор, а затем используете вычислительные шейдеры для расчета того, что нужно рисовать, а не делать этов вашей программе. К сожалению, это очень новое, поэтому я не знаю о каких-либо достойных учебниках. Взгляните на обзор OpenGL 4.3 , в котором описывается, как это работает (также автор говорит, что есть статья GPU Pro, которая будет опубликована, объясняя это). Будучи совершенно новым, он не будет поддерживаться нигде на этом этапе (если вы не на новой карте nvidia с бета-драйверами). Хотя вы можете использовать OpenCL /CUDA для реализации некоторых из них.

Я бы пропустил glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix и так далее. Вместо этого начните с изучения объектов буфера Vertex без шейдеров, не пытайтесь 3D в этот момент просто плоский белый треугольник, поэтому вам не нужно работать с 3d-операциями с использованием матриц (так как вам нужно научиться привязывать их к шейдерам в ближайшее время нет смысла учиться на старом пути). Затем добавьте в шейдеры, вам нужно будет изменить способ привязки объектов буфера вершин, так как теперь вы хотите использовать атрибуты вершин. Узнайте, как передавать свойства им через униформу. Затем изучите матричные операции с GLM, привяжите матрицы к шейдерам и получите 3D-движение. После того, как вы это сделаете, в основном просто изучите более сложные вещи, такие как текстурирование, освещение и некоторые специальные функции, такие как объекты фреймбуфера, объекты массива вершин, равномерные объекты буфера, подпрограммы GLSL и т. Д. (Это все, что я рекомендую вам взглянуть на Большинство из них довольно новые, за исключением текстурирования и освещения, но если вы изучите их как концепцию шейдеров, а не как OpenGL, вы должны получить современный подход).

Некоторые общие онлайн-учебные руководства 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 2nd edition (Orange Book).

В OpenGL OpenGL 4.0 зашифрованная книга Cookings покрывает некоторые другие эффекты OpenGL, но сама по себе не является исчерпывающим учебником. Его определенно стоит посмотреть, чтобы получить некоторое представление о новейших практиках OpenGL реального мира, таких как однородные объекты буфера и подпрограммы GLSL.

Наконец, вы можете взглянуть на WebGL, хотя в JavaScript это будет несколько отличаться и гораздо сложнее отлаживать.

ответил Jose Chavez 25 J0000006Europe/Moscow 2011, 01:31:27
15

Забудьте о книгах, по крайней мере, до выхода восьмого издания руководства по программированию.

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

ответил Jose Chavez 25 J0000006Europe/Moscow 2011, 01:31:27
11

Я был в той же ситуации, что и вы, и, наконец, нашел то, что мне нужно было сделать.

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

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

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

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

Надеюсь, это поможет и удачи, я с нетерпением жду встречи с вами в будущем!

UPDATE

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

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

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

ответил Jose Chavez 25 J0000006Europe/Moscow 2011, 01:31:27
8

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

ответил Jose Chavez 25 J0000006Europe/Moscow 2011, 01:31:27
5

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

Кроме того, виртуализация OpenGL является чрезвычайно хорошим и актуальным ресурсом.

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

ответил Jose Chavez 25 J0000006Europe/Moscow 2011, 01:31:27
4

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

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

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

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

ответил Jose Chavez 25 J0000006Europe/Moscow 2011, 01:31:27
4

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

ответил Jose Chavez 25 J0000006Europe/Moscow 2011, 01:31:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132