Начиная с OpenGL, когда большинство уроков устарели [закрыто]

16

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

Я готов начать программирование в OpenGL с использованием C ++. У меня есть работающий компилятор (DevCpp; НЕ просите меня перейти на VC ++ и не спрашивайте меня, почему). Сейчас я просто ищу солидное руководство по программированию с OpenGL. Мой помощник нашел учебное пособие, предоставленное NeHe Productions, но, как я выяснил, это УСТАРЕЛО! (хотя я собрал основное окно для поддержки холста OpenGL)

Затем я вышел в интернет и нашел OpenGL SuperBible, который, очевидно, использует freeglut? Но что я хотел бы знать, так это то, обновлено ли 5-е издание SuperBible. В предложении freeglut я обнаружил, что последняя версия была 2.6.0, но теперь это 2.8.0!

  • Является ли OpenGL SuperBible все еще хорошим и достаточно современным местом для старта?
  • Есть ли лучшее место для изучения OpenGL?
  • Могу ли я просто хранить freeglut в каталоге включения DevCpp (может быть, в GL), или есть какая-то важная процедура?
  • Есть ли какие-либо комментарии или предложения, о которых я не думал спрашивать, так как я только начинаю?

@dreta прояснил некоторые вещи для меня, так что теперь у меня есть лучшее представление о том, что спросить:

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

Проблема в том, что я не могу найти библиотеку, в которой нет неопределенных ссылок на более не поддерживаемые функции. Freeglut звучит оперативно, но все еще использует GLU.
Кто-нибудь знает, что я могу сделать?
Кроме того, я попытался скомпилировать исходный код первой SuperBible, но получил ошибки, поскольку GLAPI не определяется как тип, ошибка, возникающая в библиотеке GLU.

Я хотел бы использовать SuperBible, но я не знаю, как это исправить.

CodeSmith
источник
2
Вы должны переключиться на GCC.
Нотлеш
DevCpp - это просто IDE; который запускает GCC (mingw, чтобы быть конкретным). Но с тех пор, как это было упомянуто, Eclipse CDT будет предпочтительнее, так как он не был оставлен в течение последних 10 лет.
Каспер Бейер
4
@Casper Наследником наследия DevCpp был Code :: Blocks, и он до сих пор регулярно обновляется.
Алекс Шепард
1
Если вам нужна библиотека-оболочка для OpenGL, я советую попробовать SFML . SFML предоставляет обычные вещи, такие как создание окон, таймеры и т. Д., А также позволяет рисовать текст и простые формы. Вы можете в любой момент отказаться от использования «сырого» OpenGL, смешивая функции SFML и необработанные вызовы API.
Оскар Н.
1
Вы не можете "закрыть" вопрос, добавив "{CLOSED}" к заголовку. Вопросы будут закрыты модераторами или если достаточно пользователей проголосовало за закрытие вопроса. Я откатил ваши правки обратно ... "ЗАКРЫТО" будет автоматически добавлено к вашему заголовку, если модераторы решат его закрыть ..
bummzack

Ответы:

19

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

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

Если вы хотите узнать о GLSL, есть учебное пособие по GLSL от lighthouse3D. Хотя это единственное основное знание, которому я бы «доверял» на сайте, отдых, как правило, устарел.

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

Большинство, если не все, на самом деле доступных книг OpenGL устарели. Новый SuperBible какой-то урод, и я бы никому его не рекомендовал. Руководство по программированию OpenGL для OpenGL 4.1 выходит 16 сентября, к сожалению, 7-е издание использует устаревший код, так что вам просто нужно подождать, я уверен.

И конечно, вы всегда можете задать вопросы здесь.

Dreta
источник
1
Почему бы вам не предложить SuperBible?
Кодесмит
3
@AUTO 5-е издание SuperBible использует специальную оболочку вокруг OpenGL, чтобы сделать ее «доступной». Во многих примерах чрезмерно используется пользовательская оболочка. Он не учит вас тому, к чему это относится, а именно к спецификации ядра OpenGL. На мой взгляд, если вам не нужно изучать устаревший OpenGL, просто забудьте, что он существует. Нет смысла изучать это. Основная спецификация гораздо яснее и мощнее.
Дрета
@AUTO Базовая спецификация гораздо сложнее в начале, это хорошо. Это заставит вас позаботиться о большей части процесса рендеринга, предоставив вам полное понимание и контроль над ним. Это открывает много, намного больше возможностей, чем устаревший код. После этого, если вы сможете изучить API вашей ОС и запустить OpenGL под ним без таких вещей, как перенасыщение, то вы в стране чудес.
Дрета
Хорошо, позвольте мне задать вам важный вопрос: библиотека GLU устарела и полностью не поддерживается; используя спецификацию, могу ли я получить прямой доступ, минуя необходимость в GLU? Так что я не получу больше ошибок компоновщика с несуществующими функциями, на которые ссылается библиотека GLU?
Кодесмит
@ AUTO GLU совершенно не нужно, я когда-либо трогал его только 10-футовым шестом во время урока графического программирования (нам пришлось использовать устаревший код, это было больно, стандарты меняются быстрее, чем программа урока, я думаю). Это просто библиотека, которая помогает с устаревшим кодом. Если ваш код настроен с помощью GLU, то он, вероятно, воняет.
dreta
1

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

Я начал с OpenGL, прочитав мини-книгу arcsynthesis.org. Не уверен, кто это написал. Похоже, что регистрация на сайте истекла или что-то в этом роде, но вы можете найти ее здесь: http://web.archive.org/web/20140209181347/http://www.arcsynthesis.org/gltut/ . Он использует OpenGL 3.3, поэтому вы будете использовать современный конвейер и все связанные с ним практики, но вы не будете подвержены тесселяции или вычислительным шейдерам.

Еще один сайт стоит посмотреть https://open.gl/ . Кажется, что он ОЧЕНЬ ориентирован на новичка и не охватывает такие подробности, как описанный выше материал, но это может быть хорошей отправной точкой для людей, которые только начинают.

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

Приправы
источник
1
Человек, упомянутый в принятом ответе, написал его Никол Болас - gamedev.stackexchange.com/users/8240/nicol-bolas
Джесси Дорси
0

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

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

Некоторые версии (а именно OpenGL ES 2.x) требуют, чтобы вы предоставили свои собственные уравнения освещения (в виде фрагментированных шейдеров) и преобразовали свои собственные данные вершин, чтобы они оказались на экране там, где вы хотите (Vertex Shaders). Это еще сложнее для отладки и не место для новичка (по моему мнению).

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

notlesh
источник
На самом деле они не работают. Вот почему я разместил этот вопрос. Они используют функцию gluPerspective, которая устарела, и нет абсолютной замены.
Кодесмит
1
Это не функция OpenGL. Это отдельная служебная функция, предоставляемая другой библиотекой. Вы можете легко найти код для него - это не очень сложно.
notlesh
Спасибо, но я нашел только несовершенную замену, которую я не знаю, как использовать. Он принимает аргумент "float * matrix", тогда как старый использует некоторую внутреннюю матрицу. Что я положу на это тогда?
Кодесмит
Первое попадание в Google для «реализации gluPerspective» - именно то, что вы ищете. он вызывает glFrustum, который недоступен в некоторых последних версиях OpenGL (ES 2.x не включает его). Даже это не так сложно найти.
Нотлеш
0

Как уже говорили другие, большинство книг либо устарели, либо слишком продвинуты. Тем не менее, я бы порекомендовал 5-е издание SuperBible, но только для того, чтобы получить краткий обзор того, что можно сделать в OpenGL, и ознакомиться с такими вещами, как вид / проекция и т. Д.

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

Я также хотел бы добавить сайт с хорошими учебниками, которые я нашел в последнее время http://ogldev.atspace.co.uk/

Grieverheart
источник
Спасибо, я проверю этот учебник; но для использования OpenGL SuperBible у меня все еще остается вопрос: как исправить GLU, так как FreeGlut основан на нем?
Кодесмит
@AUTO: FreeGLUT не основывается на GLU. Некоторые функции FreeGLUT вызывают GLU, но если вы не вызовете эти функции, у вас не возникнет проблем.
Никол Болас
Но разве не похоже, что SuperBible вызывает эти функции? И если это произойдет, я не могу использовать это .
Кодесмит
На самом деле, мое мнение не должно беспокоить исходный код, поставляемый с SuperBible. Прочитайте это, но попробуйте сделать все с нуля. Что касается ваших проблем с GLU, я думаю, вы неправильно настроили / установили свои библиотеки. Загрузите последнюю версию MinGW. Также загрузите последнюю версию freeglut и скомпилируйте ее или найдите предварительно скомпилированную библиотеку. В любом случае, вы должны начать изучать некоторые вещи, а не тратить так много времени на планирование, как начать.
Grieverheart
@AUTO: Почему SuperBible их называет? Если бы он вызывал их, код SuperBible не работал бы. Вот почему это не вызывает их.
Никол Болас
0

arcsynthesis.org (сайт, упомянутый в принятом ответе), к сожалению, не работает. (РЕДАКТИРОВАТЬ: это доступно по этой ссылке !).

Руководства Антона Герделана по OpenGL 4 очень читабельны и актуальны на середину 2014 года. Первые несколько бесплатны, остальные доступны на Amazon, где они имеют отличные отзывы, за небольшую цену. До сих пор я был доволен.

На сайте http://www.opengl-tutorial.org/ есть еще несколько бесплатных руководств по OpenGL 3.3+ . Они датируются 2012 годом, но могут быть хорошим дополнительным материалом для других источников.

iHateCamelCase
источник
OGLDev является актуальным, глубоким и бесплатным. ogldev.atspace.co.uk/index.html
Yattabyte
кашель
Николь Болас
Приятно видеть, что это доступно! Я также проверю эти материалы.
iHateCamelCase