Уроки по OpenGL

Независимо от того, пытаетесь ли вы изучить OpenGL в образовательных/карьерных целях или просто ищете новое хобби, эти бесплатные уроки по графическому программированию научат вас основам и всем необходимым деталям работы с OpenGL. Цель этого туториала — показать вам всё, что есть в современном OpenGL, простым для понимания способом с наглядными примерами, а также предоставить бэкграунд для ваших последующих исследований/углублений в эту тему.

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

Чему вы научитесь?

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

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

Поскольку OpenGL является графическим API, а не, собственно, платформой, то для работы с ним потребуется язык программирования. В нашем случае, это язык C++, поэтому вам понадобятся знания по C++. Вам не обязательно быть экспертом по C++, но вы должны уметь написать что-то большее, чем программу «Hello, world!». Для получения дополнительных знаний отлично подойдут уроки по С++ на Ravesli, где каждая тема объясняется отдельным уроком и куда вы всегда сможете обратиться за детальным разъяснением.

Также на данных уроках будет использоваться математика (линейная алгебра и геометрия вместе с тригонометрией), которую я также буду стараться объяснять по мере необходимости. Однако, я не являюсь профессиональным математиком, поэтому, хоть мои объяснения и могут быть понятными, они, скорее всего, будут неполными. Поэтому, где это необходимо, я буду указывать хорошие ресурсы, которые объясняют материал более подробно. Не пугайтесь момента с математикой, всё не так уж и страшно 🙂 Большая часть функционала, с которым мы будем работать, не потребует от вас понимания всей подноготной математики, если вы знаете, как её использовать.

Структура уроков

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

Глоссарий терминов в OpenGL

Словарь терминов в OpenGL

Глава №0. Начало работы с OpenGL

Урок №1. Введение в OpenGL

Урок №2. Подготовка к первому проекту OpenGL: настройка GLFW, CMake и GLAD

Урок №3. Наш первый проект в OpenGL — Создание окна

OpenGL и Linux: Установка и настройка Code::Blocks

Урок №4. Рисуем наш первый треугольник в OpenGL

Урок №5. Шейдеры в OpenGL

Урок №6. Текстуры в OpenGL

Урок №7. Трансформации в OpenGL

Урок №8. Системы координат в OpenGL

Урок №9. Камера в OpenGL

Глава №1. Освещение в OpenGL

Урок №10. Цвета в OpenGL

Урок №11. Базовое освещение в OpenGL

Урок №12. Материалы объектов в OpenGL

Урок №13. Карты освещения в OpenGL

Урок №14. Источники света в OpenGL

Урок №15. Множественные источники света в OpenGL

Глава №2. Загрузка моделей в OpenGL

Урок №16. Библиотека импорта 3D-моделей Assimp в OpenGL

Урок №17. Mesh в OpenGL

Урок №18. Загрузка моделей в OpenGL

Глава №3. Продвинутый OpenGL

Урок №19. Тестирование глубины в OpenGL

Урок №20. Тест трафарета в OpenGL

Урок №21. Смешивание в OpenGL

Урок №22. Отсечение граней в OpenGL

Урок №23. Фреймбуферы в OpenGL

Урок №24. Кубические карты в OpenGL

Урок №25. Расширенные методы взаимодействия с данными в OpenGL

Урок №26. Расширенные возможности GLSL в OpenGL

Урок №27. Геометрические шейдеры в OpenGL

Урок №28. Инстансинг в OpenGL

Урок №29. Сглаживание в OpenGL

Глава №4. Продвинутое освещение в OpenGL

Урок №30. Продвинутое освещение в OpenGL

Урок №31. Гамма-коррекция в OpenGL

Урок №32. Отображение теней в OpenGL

Урок №33. Всенаправленные карты теней в OpenGL

Урок №34. Карта нормалей в OpenGL

Урок №35. Эффект параллакса в OpenGL

Урок №36. HDR в OpenGL

Урок №37. Эффект свечения в OpenGL

Урок №38. Отложенное затенение в OpenGL

Урок №39. SSAO в OpenGL

Глава №5. PBR в OpenGL

Урок №40. Физически корректный рендеринг (PBR) в OpenGL

Урок №41. Освещение в PBR

Урок №42. IBL. Диффузная облученность

Урок №43. IBL. Зеркальная облученность

Дополнительные уроки

Урок №44. Отладка в OpenGL

Урок №45. Рендеринг текста в OpenGL

Создание игры «Breakout» на С++/OpenGL

Часть №1: Введение в создание игры «Breakout» на C++/OpenGL

Часть №2: Подготовка к созданию игры «Breakout» на С++/OpenGL

Часть №3: Рендеринг спрайтов в игре «Breakout» на С++/OpenGL

Часть №4: Создание уровней в игре «Breakout» на C++/OpenGL

Часть №5: Добавление мяча в игру «Breakout» на C++/OpenGL

Часть №6: Обнаружение столкновений в игре «Breakout» на C++/OpenGL

Часть №7: Обработка столкновений в игре «Breakout» на C++/OpenGL

Часть №8: Создание системы частиц в игре «Breakout» на C++/OpenGL

Часть №9: Постобработка в игре «Breakout» на C++/OpenGL

Часть №10: Система бонусов в игре «Breakout» на С++/OpenGL

Часть №11: Добавление аудио в игру «Breakout» на C++/OpenGL

Часть №12: Рендеринг текста в игре «Breakout» на C++/OpenGL

Финал

OpenGL. Заключительные мысли

Адаптированный перевод с LearnOpenGL.com.