Есть много вещей, из которых вы могли бы поучиться. Вот мои размышления о каждом, с точки зрения кого-то новичка в OpenGL.
Примеры OpenGL
Существует множество примеров кода, которые вы можете прочитать. Примеры G-truc довольно обширны и охватывают множество дополнительных функций.
Однако, если вы новичок , учиться на примерах - ужасный способ учиться. Чтение кода, который вы на самом деле не понимаете, не научит вас, почему это работает. Действительно, текст на вышеуказанной связанной странице определенно и справедливо гласит, что примеры не для начинающих.
Учиться на голом исходном коде, если он не комментируется (на этом этапе это учебное пособие), не легкая вещь. Попытка сделать это поощряет программирование в стиле культового груза и копирование и вставка кода. Очень легко убедить себя, что вы понимаете, как что-то работает, когда все, что вы на самом деле делаете, это просто копируете код из одного места в другое. Вы можете быть в состоянии смешивать и сопоставлять вещи, но истинного понимания трудно достичь без надлежащего учебного материала.
Книги OpenGL
Для разработки OpenGL существует немало актуальных книг, которые можно приобрести. Я расскажу свои мысли о двух крупнейших здесь.
OpenGL Redbook
Этот вопрос несколько проблематичен с чисто практической точки зрения. Смотрите, 7-е издание охватывает GL 3.0 и 3.1. Который довольно старый. С тех пор в OpenGL было добавлено много полезных функций, которые меняют способ написания вещей. И не все из них являются аппаратными функциями.
8-е издание выйдет «скоро» и будет охватывать 4.1. Нет слов о том, охватывает ли он старые вещи с фиксированными функциями.
Я бы сказал, что с этой книгой все в порядке. Самая большая проблема с этим - организация информации. Это больше похоже на всеобъемлющее справочное руководство, чем на книгу для изучения. Вот что я имею в виду.
Одна из самых важных вещей, которую нужно делать при обучении, - не перегружать студента неважной информацией. Но Redbook делает именно это. При введении материала, он вводит много материала. Многое из этого лишнее для поставленной задачи.
То, о чем вы говорите и когда говорите об этом, имеет решающее значение для того, чтобы сделать вашу книгу хорошим учебным ресурсом. Redbook никогда не хранит информацию до более подходящего времени. Когда он говорит о том, как рисовать треугольники и примитивы, он говорит обо всем о рисовании их, все сразу. Он охватывает каждую опцию, каждую функцию, каждый параметр и т. Д.
Это просто не очень хорошая организация информации.
OpenGL Superbible
Пятое издание этой книги охватывает только ядро GL 3.x, поэтому нет фиксированной функции.
Однако общая организация книги более или менее идентична организации четвертого издания. Это кажется невозможным, так как 4-е издание использовало фиксированную функцию и не вводило шейдеры намного позже.
То, как это было достигнуто, - моя жалоба № 1 на книгу. По сути, автор создал библиотеку, которая реализует форму OpenGL с фиксированной функцией. Он оборачивает VAO, буферные объекты, шейдеры и другие объекты, так что он может получить доступ к объектам рисования, матричной математике и текстурам, не говоря о том, как работает конвейер GL в деталях.
Скрывая все эти детали, он облегчает усвоение материала. Но вы часто будете видеть, как люди уходят из Superbible, не зная, как на самом деле функционировать без библиотеки. Они не совсем понимают, как шейдеры подключаются к объектам буфера, как данные передаются по конвейеру и т. Д.
Это исправная книга, а не Красная книга. Если все остальное терпит неудачу, это сделает работу. Но я думаю, что это может быть лучше.
Кроме того, по мнению некоторых обозревателей, кажется, что отсутствует определенная полезная информация, такая как упаковка атрибутных данных с использованием нормализованных значений и тому подобное.
OpenGL Интернет-материалы
Есть много онлайн-материалов, из которых можно поучиться.
Учебники NeHe
Учебные пособия NeHe , как утверждают другие, крайне устарели. Они сосредоточены на фиксированной функции OpenGL. Часто утверждается, что легко изучить GL с фиксированной функцией, что верно. Но это не делает это хорошей идеей.
Понимание того, как фиксированная функция трубопровод действительно работает трудно. Я бы сказал, что это сложнее, чем изучать шейдеры. Как только вы это получите, шейдеры просты. Понимание тонкостей текстурного окружения, объединителей и еще чего-то очень сложное и требует частых посещений справочных документов, чтобы убедиться, что все настроено правильно. Даже если вы все правильно понимаете, легко совершить небольшую ошибку, которая все сломает.
Разница в том, что вы можете заставить работать фиксированные функции, не понимая этого. Это поощряет программирование культа грузов. Это позволяет получить что-то на экране, даже не зная, что он делает. На форумах OpenGL.org мы постоянно видим вопросы о мелочах, связанных с фиксированной функцией, от людей, не знающих, как работает gluLookAt, до проблем с освещением, до людей, пытающихся получить какой-то определенный эффект для работы с текстурной средой.
Так что нет, я не думаю, что NeHe - это хороший способ изучить OpenGL.
Приведенный выше комментарий может быть использован для любого не основанного на шейдере учебника, такого как Swiftless , Lighthouse и так далее.
Wikibook's OpenGL Программирование
Wikibook OpenGL Programming , вероятно, является современным эквивалентом NeHe. Он охватывает GL версии 2.1, потому что они хотят, чтобы это было актуально для мобильных платформ. Если это важно для вас, то обязательно посмотрите здесь.
Другая проблема с NeHe, и, следовательно, с этим Wikibook, заключается в большом внимании к исходному коду. Соотношение текста и кода очень мало; есть много кода, но текст не объясняет , как все это работает.
В качестве примера посмотрите на нижнюю часть учебника 2. В нем представлено смешивание. Это не говорит о том, как работает смешивание. Это не говорит, что на glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
самом деле означает или делает. Он просто говорит: «Вот код, который делает вещи прозрачными».
Это не лучшая среда обучения.
Неполные учебники
Swiftless имеет набор OpenGL 4.x учебники . Durian Software также имеет несколько основанных на шейдерах учебных пособий по OpenGL . И есть учебники "OpenGLBook.com" .
Общим для всех этих людей является то, что они неполные и заброшенные. Все они получили около 4-5 уроков, а затем были отброшены. Никто из них не достиг текстуры, освещения или чего-то подобного. Ну, Дуриан ударил текстурирование, но не освещение.
От них можно многое почерпнуть, но и многого не хватает.
Бесстыдная самореклама
Просмотр моих собственных учебных пособий по современной 3D-графике был бы ужасным конфликтом интересов. Поэтому вместо этого я подробно расскажу об организации, стоящей за ними, и почему я думаю, что они хороши.
О, да, я работаю над Уроком 17. Проект не умер.
Первые три главы действительно посвящены изучению работы конвейера OpenGL. Супербибле не удалось, потому что он пытался скрыть детали. Вместо этого я пытаюсь объяснить эти детали действительно, очень хорошо. Несколько раз. Введение объясняет конвейер в виде простого текста. Первый урок объясняет это сопровождением кода. И второй урок посещает его еще больше.
Оттуда я естественно перехожу к позиционированию объектов. Это вводит униформу, но я не хотел смешивать униформу и перспективную проекцию одновременно. Итак, я разделил две концепции. После проекции буферизация глубины казалась разумным следующим шагом, за которым следовало, как работают преобразования и матрицы. После этого камеры. Вращение с кватернионами было поздним дополнением, но я чувствую, что для начинающего графического программиста важно поговорить об этом.
Учебники по освещению снова строят одно на другом. Диффузное, затем осветительное, затем зеркальное. Динамический диапазон был интересным выбором. Большинство вводных материалов пытается держаться подальше от этого, но я принимаю это. Вы не программист графики в наши дни, если думаете, что интенсивность света всегда находится в диапазоне [0, 1]. И вы не программист графики, если вы не знаете, как поддерживать линейный конвейер цвета.
Последний в освещении, на самозванцах, был странным. Я стараюсь разрабатывать учебники, которые решают проблемы, а не просто показывают некоторые функции OpenGL, особенно по мере продвижения книги. Большая часть моего учебного проекта основана на поиске способов говорить на определенные темы, в то же время делая их реальными проблемами, а не очевидными: «Мы изучаем X сейчас». Геометрические шейдеры сложны, потому что они не решают много проблем.
Самозванцы представляли проблему, которую GS действительно помогли решить. Кроме того, это позволило мне говорить о других менее используемых вещах, таких как discard
и изменение глубины фрагмента. И это действительно показывает силу шейдеров: вы можете сделать плоский квадрат сферой.
Уроки текстурирования также интересны. Одна из причин, по которой я откладывал разговоры о диффузных цветных текстурах, пока третья заключалась в том, чтобы некоторое время не говорить о текстурах sRGB. Таким образом, я мог бы говорить об основных проблемах, связанных с текстурами (загрузка данных, размещение их в шейдерах, фильтрация, фиксация и т. Д.) Без необходимости решать линейные проблемы. Тогда я мог бы провести целый урок только на эту тему. Это позволило мне действительно, действительно подчеркнуть, насколько важно поддерживать линейный цветовой конвейер.
Это одна из моих любимых мозолей.