Изучение современного OpenGL - PullRequest
37 голосов
/ 05 января 2012

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

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

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

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

И есть также SFML и SDL (SDL

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

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

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

С чем идти?

Ответы [ 6 ]

37 голосов
/ 05 января 2012

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

*Аппаратное обеспечение 1003 *

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

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

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

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

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

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

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

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

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

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

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

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

С чем идти?

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

ВНИМАНИЕ: Бесстыдная самообманАкция продолжается!

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

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

19 голосов
/ 05 января 2012

Если вы пишете игру, я бы избегал таких вещей, как 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 и того, как работают шейдерные конвейеры.

6 голосов
/ 05 января 2012

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

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

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

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

3 голосов
/ 05 января 2012

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

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

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

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

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

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

Удачи!

2 голосов
/ 15 мая 2012

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

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

0 голосов
/ 08 января 2016

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

Краткое введение в Qt и OpenGL см. мой пост здесь .

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

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

...