Глава 13. Базовые классы 2

Windows 1. Запускаем VS. Открываем C:\CPP\a998engine\p_windows\p_windows.sln MyColor класс Причина держать цвет в отдельном классе в том, что он будет нужен в ТРЕХ разных форматах: как массив 4-х byte integers (от 0 до 255, как это хранится в файлах) как массив 4-х floats (от 0.0 до 1.0, как требуется OpenGL-ом) и как 32-bit integer (4 байта, по […]

Глава 12. Графический движок. Базовые классы

К этому моменту мы благополучно “поженили” desktop и мобильник, Visual Studio и OpenGL ES. И начинаем строить наш графический движок. Разумеется, это можно сделать по-разному. Внимание: Весь дальнейший материал отражает мое личное видение этой темы. Начнем с базовых классов. Наш текущий TheGame код рендрит 1 простой предмет, текстурированный прямоугольник. В реальной игре у нас будет […]

Глава 11. Текстуры

1. Для начала нужно загрузить текстуру в программу. Какая-нибудь image-loading библиотечка, поддерживающая несколько популярных форматов кажется неплохим решением. Мне понравилась stb_image.h от Шона Барретта, особенно то, что это 1 h-файл, а не lib или dll. Скачать можно здесь. Сохраним ее в C:\CPP\engine folder (там же где и linmath.h ранее). 2. Потом нужна сама картинка. Создадим […]

Глава 10. Простой шейдер

Наконец, шейдеры! Начнем с самого простого, просто заливка сплошным цветом, который мы передадим шейдеру в качестве инпута вместе с данными повехности (в нашем примере – треугольника). Шейдеры пишутся на GLSL (OpenGL Shading Language с синтаксисом похожим на C). GLSL исполняется на граф-карте. Исполняемая шейдер-программа состоит из 2-х шейдеров: Vertex Shader, который обрабатывает данные вешин (включая […]

Глава 9. Сохраняем Android assets в файлы

Хотя мы можем использовать Android assets и напрямую (как мы только-что сделали в последнем примере). всё же надо помнить, что “ассеты” – это НЕ файлы в обычном понимании. Разница в том, что:: К Ассетам нельзя доступиться обычными файловыми инструментами. Только через специальный Assets интерфейс. Они все read-only. Мы не сможем их модифицировать или добавлять новые […]

Глава 8. Внешние файлы данных, Android assets

Идея та же что и в предыдущей главе – расположить файлы данных в пределах досягаемости от экзешника. Правда, в случае Андроида мы имеем дело не с экзешником, а с APK. Кроме того, нам надо доставить файлы не просто в другой каталог, а на другое устройство. Единственный (известный мне) “транспорт” – это специальный каталог “assets“, который […]

Глава 7. Внешние файлы данных, Windows

Теперь мы готовы приступить к написанию реальных (практически используемых) шейдеров. Сейчас у нас есть 2 (1 vertex и 1 fragment), встроенных (hard-coded) в код. Понятно, что не лучшее решение, но ради простоты примера – вполне оправданное. Мы же, в свою очередь, предпочтем держать их за пределами экзешника. 1. В Windows File Explorer-е (не в VS), […]

Глава 6. Cross-platform, Android

Теперь попробуем запустить TheGame класс на Android-е. 1. Запускаем Visual Studio, открываем C:\CPP\a999hello\p_android\p_android.sln solution. 2. Под p_android.NativeActivity проектом добавим “xTheGame” фильтр: Right-click на p_android.NativeActivity project -> Add -> New Filter. Name – xTheGame Под xTheGame добавим Existing Item: Right-click на xTheGame -> Add -> Existing Item, Идем на C:\CPP\a999hello Файлы – TheGame.cpp и TheGame.h Add. […]

Глава 5. Cross-platform, Windows

В этой главе мы попробуем “препарировать” наш GLFW пример с треугольником. Мы выведем “игровой” код (который готовит и рисует треугольник) в отдельный класс, который потом попробуем использовать и на Android-е. Чтобы код был platform-independent (независимым) мы отделим его от platform-specific вызовов. Весь environment-related код, типа создание окна, инициализация GL-а, и т.д., мы оставим в main.cpp […]

Глава 4. Printf в OpenGL ES

Теперь, имея 2 OpenGL ES проекта на разных платформах, можно прикинуть что в них общего и в чем разница. Общая структура: Создание GL context-а, инициализация данных, главный цикл с покадровым rendering-ом, выход. GL команды (Слава Богу!) выглядят тоже похоже. Разница в инициализации окна и GL-a, в GL-related инклюдах (gl/egl на Android-е и glfw/glad в Windows-е). […]