Подтвердить что ты не робот

Изучение современного OpenGL

Я знаю, что в последние несколько лет были похожие вопросы, но после некоторых исследований я все еще не могу решить, откуда и от чего я должен учиться. Я также хотел бы видеть ваш текущий, фактический взгляд на современное программирование OpenGL с использованием более С++ OOP и шейдерного подхода. И убедитесь, что мое фактическое понимание некоторых вещей действительно.

Итак... в настоящее время у нас есть OpenGL 4.2 out, который, как я где-то читал, требует оборудования dx11 (что это значит?) и набор "боковых" библиотек, например, для создания окна.

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

Существует также GLFW, что на самом деле довольно приятно и прямолинейно для меня. По какой-то причине люди используют его с GLUT. (который обеспечивает не только инициализацию окна, но и другие утилиты?)

И есть также SFML и SDL (SDL < SFML imo), тогда как для обоих из них иногда нужен странный подход к работе с OGL, а в некоторых случаях не очень быстрый.

И у нас есть также GLEW, который является утилитой для загрузки добавок... wait... не является GLUT/GLFW уже расширением? Есть ли причина использовать его, например, есть ли действительно важные расширения, чтобы заинтересовать?

До сих пор у нас есть создание окна (и некоторые утилиты), но... OGL не заботится о загрузке текстур, а не о трехмерных моделях. Сколько еще libs мне нужно?

Теперь расскажем о части обучения. Существует (в) знаменитый учебник NeHe. Написанный на C с использованием WinApi с крайне нечетким кодом и устаревшими решениями, но все же самый популярный. Некоторые вещи, такие как Красная книга, могут быть найдены, которые связаны с версиями, такими как 2.x или 3.x, однако есть только несколько (и незавершенных) руководств, в которых упоминается 4.x.

Чем заняться?

4b9b3361

Ответ 1

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

Я бы также избежал OpenGL 4.2 на данный момент, если только вы не хотите нацеливать определенное оборудование на определенные платформы, потому что поддержка минимальна. то есть последняя версия Mac OSX Lion просто добавила поддержку OpenGL 3.2.

Для наиболее полного покрытия машин, созданных за последние несколько лет, создайте свою инфраструктуру вокруг OpenGL 2.1 и добавьте дополнительную поддержку для новых функций OpenGL, где они имеют смысл. Общий дизайн должен быть одинаковым. Если вас интересует только таргетинг на "текущие" машины, то есть машины с конца 2011 года и вперед, создайте свою фреймворк вокруг OpenGL 3. Только новейшее аппаратное обеспечение поддерживает 4.2 и только для Windows и некоторых Linux. Если вы заинтересованы в настройке мобильных устройств и консолей, используйте OpenGL ES 2.0.

GLEW загружает и управляет OpenGL Extensions, которые являются аппаратными расширениями от разных поставщиков, в отличие от GLUT, который представляет собой набор инструментов для создания приложений OpenGL, совершенно разные вещи. Я бы настоятельно рекомендовал использовать GLEW, так как он обеспечит чистый механизм для определения того, какие функции доступны на оборудовании, на котором он выполняется, и освободит вас от необходимости вручную назначать указатели на функции соответствующим функциям.

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

Ответ 2

Итак... в настоящее время у нас есть OpenGL 4.2 out, который, как я где-то читал, требует аппаратного обеспечения dx11 (что это значит?) и набора "боковых" библиотек, например, для создания окна.

Аппаратное обеспечение DX11 - это аппаратное обеспечение, поддерживающее DirectX 11, написанное сбоку от коробки. Я не уверен, что вы здесь спрашиваете; вы неясны в отношении того, что такое Direct3D, что такое D3D 11 или что отделяет D3D 11 от предыдущих версий?

FYI: D3D является альтернативой только Windows для использования OpenGL для доступа к оборудованию для рендеринга. Версия 11 - это самая последняя версия API. И D3D11 добавляет несколько новых вещей по сравнению с D3D10, но ничего особенного для новичков не потребуется.

OpenGL - это спецификация, описывающая определенный интерфейс для графических операций. Как создается этот интерфейс, он не является частью OpenGL. Поэтому каждая платформа имеет свой собственный способ создания контекста OpenGL. Windows использует API Win32 с WGL. X-Windows использует X-Windows API с функциями GLX. И так далее.

Библиотеки, такие как GLUT, GLFW и т.д., являются библиотеками, которые абстрагируют все эти различия. Они создают и управляют окном OpenGL для вас, так что вам не нужно загрязнять свой код деталями конкретной платформы. Вам не нужно использовать никого из них.

Конечно, если вы заинтересованы в изучении OpenGL, лучше избегать общения с определенными на платформе minutae, например, как позаботиться о HWND и т.д.

И у нас есть также GLEW, который является утилитой для загрузки добавок... wait... не является GLUT/GLFW уже расширением? Есть ли причина использовать его, например, есть ли действительно важные расширения, чтобы заинтересовать?

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

GLUT не является частью OpenGL; это просто библиотека. Задача GLUT - создать и управлять окном OpenGL. GLEW также является библиотекой, которая используется для загрузки функций OpenGL. Это не единственная альтернатива, но она популярна.

До сих пор у нас есть создание окна (и некоторые утилиты), но... OGL не заботится о загрузке текстур, а не о трехмерных моделях. Сколько еще libs мне нужно?

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

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

Существует (в) знаменитый учебник NeHe. Написанный на C с использованием WinApi с крайне нечетким кодом и устаревшими решениями, но все же самый популярный. Некоторые вещи, такие как Красная книга, могут быть найдены, которые связаны с версиями, такими как 2.x или 3.x, однако есть только несколько (и незавершенных) руководств, в которых упоминается 4.x.

Чем заняться?

OpenGL Wiki поддерживает список онлайн-материалов для изучение материалов OpenGL, как старой, так и более современной.

ПРЕДУПРЕЖДЕНИЕ: бесстыдное самосогласование продолжается!

Мои уроки по обучению графике довольно хороши, со многими разделами и до сих пор активно работают. Он не учит никакой функциональности OpenGL 4.x, но OpenGL 3.3 полностью совместим с 4.2. Все эти программы будут отлично работать на аппаратном обеспечении 4.x.

Я также поддерживаю неофициальный SDK для OpenGL. Это набор полезных утилит, предназначенных для создания простым, унифицированным построить систему. Он также достаточно хорошо документирован.

Ответ 3

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

Я искал хорошую книгу и закончил с OpenGL ES 2.0 Programming Guide, который я считаю лучшим выбором для изучения современного OpenGL права Теперь. Да, книга о OpenGL ES, но не позволяйте этому пугать вас. Хорошая вещь о OpenGL ES 2.0 заключается в том, что все медленные части API были удалены, поэтому вы не получаете никаких вредных привычек от изучения, пока он все еще очень близок к настольному OpenGL в противном случае, только с несколькими недостатками, которые я подумайте, что вы можете учиться довольно легко после освоения OpenGL ES 2.0.

С другой стороны, у вас нет беспорядка с библиотеками окон и т.д., которые у вас есть с настольным OpenGL, поэтому книга по OpenGL ES вам не поможет. Я думаю, что это очень субъективно, какие библиотеки использовать, но до сих пор я отлично справлялся с SDL, ImageMagick и Открыть библиотеку импорта активов.

Теперь книга была хорошей помощью, но кроме того, там также была хорошая коллекция учебников по обучению современным OpenGL с нуля на OpenGL development на Linux. (Я думаю, что это справедливо для других ОС, но все же.) Книга, учебные пособия и взгляд или два раз в то время на Orange Book было достаточно, чтобы я понял основы современного OpenGL. Заметьте, что я все еще не мастер в этой области, но это определенно заставило меня начать.

Ответ 4

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

Сначала я был очень смущен уроками NeHe, но когда я немного понял C, собрал библиотеки в UNIX и другие основные вещи, все это встало на свои места.

Что касается загрузки текстур, я могу рекомендовать ПОЧТУ: http://www.lonesock.net/soil.html

Я не уверен, но я помню, что у меня были проблемы с его компиляцией, но, возможно, это был мой низкий опыт в то время. Дайте мне крик, если у вас возникнут проблемы!

Еще один полезный совет - запустить Linux VM, а затем вы можете загрузить пример кода NeHe Linux и скомпилировать его из коробки. Я думаю, вам просто нужен GLUT, чтобы он работал.

Я также предпочитаю GLFW перед GLUT, главным образом потому, что GLUT не поддерживается активно.

Удачи!

Ответ 5

Основная точка современного OpenGL - это тесселяция и новый тип шейдерных программ, поэтому я хотел бы рекомендовать начать с самостоятельного учебника по тегеляции OpenGL 4, то есть: http://prideout.net/blog/?p=48

После руководств и руководств хорошее наблюдение должно взглянуть на двигатели с открытым исходным кодом, которые основаны на вершине "нового" OpenGL 3/4. Как один из разработчиков, я бы указал на Linderdaum Engine.

Ответ 6

"Современное программирование OpenGL с большим количеством С++ OOP и шейдерным подходом" заставляет меня упоминать Qt. Он еще не упоминался, но Qt - это библиотека, которую стоит изучить, и это самый простой способ написания кросс-платформенных приложений на С++. Я также нашел, что это самый простой способ изучить OpenGL в целом, поскольку он легко справляется с инициализацией и конкретным аппаратным кодом для вас. У Qt есть собственные библиотеки математики, поэтому все, что вам нужно для начала работы с OpenGL, это Qt. VPlay - это библиотека, которая использует Qt, чтобы помочь людям легко создавать игры, поэтому, очевидно, некоторые люди используют Qt для создания игр.

Для краткого введения в Qt и OpenGL см. мое сообщение здесь.

Я упомянул, что поскольку Qt абстрагирует некоторый код OpenGL, если вы пытаетесь использовать оболочки Qt, API немного отличается от OpenGL (хотя, возможно, и проще).

Что касается моего голосования за хорошие уроки или книги, ознакомьтесь с Anton OpenGL tutorials и Swiftless tutorials. Антон ebook на Amazon также оценивается выше, чем любой другой опубликованный ресурс OpenGL, который я видел до сих пор (и намного дешевле).