OpenGL-Tutorial. Урок 1. Створення вікна
Передмова
Зміст
- Урок 1. Створення вікна
- Урок 2. Перший трикутник
- Урок 3. Матриці
- Урок 4. Кольоровий куб
- Урок 5. Текстурований куб
- Урок 6. Клавіатура та миша
- Урок 7. Завантаження моделей
- Урок 8. Базовий шейдинг
- Урок 9. VBO індексація
- Урок 10. Прозорість
- Урок 11. 2D текст
- Урок 12. OpenGL розширення
- Урок 13. Normal Mapping
- Урок 14. Зображення на текстуру
- Урок 15. Lightmaps
- Урок 16. Shadow mapping
- Урок 17. Обертання
- Урок 18.1. «Білборди»
- Урок 18.2. Частинки
- Урок 9. VBO індексація
- Урок 10. Прозорість
- Урок 11. 2D текст
- Урок 12. OpenGL розширення
- Урок 13. Normal Mapping
- Урок 14. Зображення на текстуру
- Урок 15. Lightmaps
- Урок 16. Shadow mapping
- Урок 17. Обертання
- Урок 18.1. «Білборди»
- Урок 18.2. Частинки
Вступ
Ласкаво просимо до першого уроку.
Перш ніж перейти до OpenGL Вам треба навчитися збирати код, який йде до кожного уроку, навчитися запускати його, і що важливіше навчитися працювати з цим кодом самостійно.
Вимоги
Жодних особливих вимог для цих уроків не потрібно. Бажано мати досвід роботи з будь-якою мовою програмування (C, Java, Lisp, Javascript і т.д.), щоб повністю розуміти код, але це не обов'язково. Просто буде складніше вивчати одразу 2 речі.
Всі уроки написані на «Легкому С++»: Безліч зусиль було докладено для того, щоб зробити код максимально простим. Немає шаблонів, немає класів, немає вказівників. Так Ви зможете зрозуміти все, навіть якщо знаєте лише Java.
Забудьте все
Вам не потрібно нічого знати, але якщо ви щось знаєте про OpenGL, забудьте про це. Якщо ви знаєте щось про glBegin(), забудьте про це. Тут Ви вивчатимете сучасний OpenGL (OpenGL 3 і 4), а більшість уроків, які Ви можете знайти в інтернеті — за старим OpenGL (OpenGL 1 і 2). Так що забудьте все, що Ви можете знати про OpenGL, інакше у вас мозок закипить від змішування різних стандартів.
Всі уроки можуть бути зібрані на Windows, Linux та Mac. Для всіх цих платформ процедура одна і та ж:
- Оновіть драйвера. Вас попередили
- Завантажте компілятор, якщо у вас ще немає
- Встановіть CMake
- Завантажте вихідний код уроків
- Згенеруйте проект за допомогою CMake
- Зберіть його
- Пограйтеся з прикладами!
Детальніше, алгоритми збирання під різні платформи представлені нижче:
Складання під Windows
Ви також можете запустити кожен урок безпосередньо з Visual Studio. Для цього натисніть правою кнопкою миші на уроці, виберіть "Choose as startup project". Тепер можна налагоджувати його за допомогою F5.

Складання під Linux
Існує дуже багато різних дистрибутивів Linux і просто неможливо описати процес складання для кожної конкретної платформи. Ось загальна процедура. Адаптуйте її для свого дистрибутива:
Зауважте, що Ви також можетевикористовувати IDE, на зразок QtCreator. Головне, щоб вона підтримувала CMake. Ось інструкція для QtCreator:
- У QtCreator відкрийте File -> Tools -> Options -> Compile&Execute -> CMake
- Встановіть шлях до CMake. Найчастіше це /usr/bin/cmake
- File -> Open Project; Виберіть tutorials/CMakeLists.txt
- Виберіть папку для збирання. Бажано вона повинна бути поза папкою tutorials.
- Ви можете встановити прапорець -DCMAKE_BUILD_TYPE=Debug у параметрах.
- Натисніть Молот внизу. Усі уроки будуть зібрані
- Щоб запустити уроки з QtCreator, натисніть Projects -> Execution parameters -> Working Directory та виберіть папку, де знаходяться шейдери, текстури та моделі.
Складання під Mac
Процес дуже схожий на збірку під Windows. (Makefile також підтримуються, але тут вони не описані).
Нотатка до Code::Blocks
У зв'язку з 2 багами (один у Code::Blocks, один у CMake), Вам потрібно змінити налаштування в Project->Build Options->Make commands наступним чином:

Також Вам доведеться настроїти робочу директорію самостійно: Project -> Properties -> Build targets -> tutorial N -> Робоча папка.
Запуск уроків
Робочими директоріями всіх скомпільованих уроків повинні бути папки з файлами, що виконуються.
Як слідувати урокам
Кожен урок містить вихідний код та інші файли, які можна знайти в tutorialXX/ директорії. Однак Ви не повинні змінювати ці проекти, вони поставляються лише як приклади. Для змін є файл playground/playground.cpp. Якщо щось піде не так у цьому файлі, просто скопіюйте код із потрібного уроку.
Відкриття вікна
Ось ми й дісталися OpenGL коду! Ну, тобто незовсім. Всі інші уроки показують низькорівневий шлях для виконання тих чи інших дій, для того, щоб Ви бачили, що ніякої магії не відбувається. Але це нудно та марно, тому ми будемо використовувати сторонню бібліотеку GLFW для надання магії. Якщо Вам дуже хочеться - Ви можете використовувати Win32 API під Windows, X11 API під Linux та Cocoa API під Mac; ну або скористатися іншою високорівневою бібліотекою, на зразок SFML, FreeGLUT, SDL і т.д.
Що ж, навіщо. На початку розберемося із залежностями: нам знадобиться деякий базовий функціонал для виведення повідомлень у консоль:
Далі підключаємо GLEW. Ця бібліотека надає трохи магії, але залишимо це потім:
Ми вирішили, що будемо використовувати GLFW для роботи з вікном та клавіатурою, тому підключаємо і її:
Наступна бібліотека нам не знадобиться, але вона надає функціонал для роботи з 3D математикою. Незабаром вона нам знадобиться. У GLM немає ніякої магії, якщо хочете, можете написати свою власну бібліотеку для роботи з 3D математикою. Директива «using namespace» потрібна для того, щоб можна було писати просто «vec3» замість «glm::vec3»:
Якщо Ви скопіювали вищезазначений код у playground і спробували його запустити, то компілятор Вам повідомить, що немає функції main. Що ж, давайте додамо її:
Для початку ініціалізуємо GLFW:
Тепер ми можемо створити наше OpenGL вікно!
Зберіть цей код та запустіть. Повинно з'явитися чорне вікно і зачинитися. Ну звичайно! Нам потрібно почекати, поки користувач не натисне Escape:
На цьому закінчується перший урок! У 2 уроці Ви навчитеся малювати трикутник.