Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the antispam-bee domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/ruwritingagame/public_html/wp-includes/functions.php on line 6121
Игра в Написание Игры – Page 4 – Роман-ностальгия по временам когда программирование было Искусством, а не ремеслом

Глава 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-е). […]