С чего начать изучать OpenGL

С чего начать изучать OpenGL

Введение

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

Что такое OpenGL

OpenGL - кросс-платформенная библиотека для 2D и 3D графики. В настоящее время используется для разработки приложений для Mac OS X, iOS, Android, Linux, конкурирует с DirectX для Windows. OpenGL используют не только для разработки игр, но и для приложений, работающих с 3D-графикой: СAD-системы, 3D редакторы, обучающие ПО, медицинские системы.

Свою популярность библиотека получила не только из-за кросс-платформенности, но и из-за возможности использования в проектах на различных языках программирования. И самое главное, OpenGL поддерживается производителями видеокарт, благодаря чему библиотека получает аппаратное ускорение видеокарт. Когда я только начинал работать с OpenGL, у меня возник вопрос: Как установить OpenGL? Где взять дистрибутив? Ответ прост: OpenGL устанавливается вместе с драйверами видеокарты, так как и список расширений и различные константы разнятся в зависимости от видеокарты (правда, Windows может иметь встроенный OpenGL старой версии без поддержки аппаратного обеспечения).

Для использования OpenGL, конечно, необходимо иметь библиотеку для линковки (gl.lib, glu.lib) и заголовочный файлы. Они входят в Visual Studio, но и их не трудно найти в Интернете.

Какие именно возможности вам предоставит OpenGL?

OpenGL предоставляет средства для рендера 3D сцены. OpenGL также позволяет гибко настраивать отрисовку. OpenGL поддерживает аппаратное ускорение, так как большинство команд выполняется на видеокарте.

Какими знаниями необходимо обладать?

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

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

Позиционирование объектов - серьёзный вопрос, связанный с 3D сценами. Объекты позиционируются с помощью аффинных преобразований: перемещение, вращение и увеличение размера. С математической точки зрения эти преобразования записываются соответствующими матрицами. Если вы плохо разбираетесь в этом, то обязательно почитайте специализированную литературу, посвященную данному вопросу.

С чего начать?

Начать изучение я бы посоветовал с хорошей книги, при этом постоянно практикуясь. На русском языке не так много хороших книг, так как большинство из них уже устарели. Я бы посоветовал следующую книгу: "OpenGL. Руководство по программированию". При начальном обучении книга может показаться довольно сложной. Параллельно с ней можно изучать статьи с примерами http://nehe.gamedev.net (перевод статей на русский http://pmg.org.ru/nehe).

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

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

Об устаревших и современных методах и расширениях

Стоит отметить, что OpenGL уже развивается на протяжении 10 лет. В течение этого времени многие функции успели устареть, а новые появлялись. Доступ к большинству современных функций производится через расширения, то есть вам необходимо запросить указатель на функции (wglGetProcAddress).

Когда вы начнёте читать книгу, то обнаружите, что в первых примерах объекты (треугольники или квадраты) вы будете строить по точкам с помощью функции glVertex*, первое освещение вы будете включать, используя glLight, задавать цвет материала функцией glMaterialf. Многие из них не используются в современных проектах. Например, вершины объектов не задаются по одной, а передаются все вместе с помощью Vertex Buffer Object (VBO). Это намного быстрее, так как вершины необходимо передать на видеокарту и намного быстрее передать все сразу, чем по одной. Стандартное освещение тоже не используется, все реализуется в шейдерах. Другими словами, объекты всегда отрисовываются с помощью шейдеров. В шейдеры передаются все необходимые параметры: освещение, материалы, матрицы. И когда вы освоите азы, вам необходимо переключаться на изучение шейдеров (GLSL).

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

На будущее

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

Теги: OpenGL