Глава 20. Modeler. Скругляем углы

Наша нынешняя квадратная модель не позволяет оценить всю прелесть Phong шейдера, в частности – блики. Для этого лучше подошло бы что-то более округлое. Зачит, давайте соответственно расширим Modeler. Windows 1. Запускаем VS. Открываем C:\CPP\a997modeler\p_windows\p_windows.sln. Во-первых – надо расширить VirtualShape.h. 2. Заменим VirtualShape.h код на: Новая концепция тут – “extensions” (расширения). Они нужны для форм с […]

Глава 19. Освещение и Phong Shading

Для более реалистичного изображения нужны свет и тени, а значит – новые шейдеры. Мы применим Phong shading model. Начнем с простого, заливка сплошный цветом. 1. Vertex shader. Скопируем нижеприведенный код в Текстовый редактор и сохраним как txt файл в C:\CPP\engine\dt\shaders\phong_ucolor_v.txt 2. Fragment shader. Скопируем нижеприведенный код в Текстовый редактор и сохраним как txt файл в […]

Глава 18. Camera view

В прошлой главе мы использовали прямую проекцию нашего кубика на плоскость экрана (screen surface). Для более реалистичного изображения понадобится Camera. OpenGL ES не предлагает встроенного объекта Камеры, значит надо создать самим. Windows 1. Запускаем VS. Открываем C:\CPP\a997modeler\p_windows\p_windows.sln. Для наглядности давайте сперва упростим движение кубика. 2. Откроем TheGame.cpp и заменим угловые скорости (строка 26) на pGS->ownSpeed.setDegrees(0,1,0); Компиляция […]

Глава 17. Modeler. Часть 2

Теперь вернемся к modeler-у. Пришло время собрать новые классы вместе. Windows 1. Запускаем VS. Открываем C:\CPP\a997modeler\p_windows\p_windows.sln. 2. Под modeler добавим новый header файл ModelBuilder.h Location – C:\CPP\engine\modeler Код: В этом примере мы создадим красный кубик с 1 синей стороной (правой). Для этого мы создадим 1 GameSubject, 2 материала, “box” virtual shape, потом на нее добавим 6 […]

Глава 16. Modeler

Наверное, пора уже подумать, где же брать реальные 3D модели для Проекта. Варианты такие: Web. Широкий выбор моделей разных форматов от профессиональных 3D художников и любителей. Многие из моделей – бесплатные. Самим освоить Blender, Maya, 3Ds Max или еще какой-то 3D редактор. ОГРОМНАЯ задача сама-по-себе. Как-то пока не ощущаю себя готовым для этого. Найти 3Д […]

Глава 15. Индексы и EBO – Element Buffer Object

В наших последних примерах мы использовали примитив GL_TRIANGLE_STRIP для рисования прямоугольника как последовательного массива вершин. Но наиболее полезный и часто-используемый примитив – это все-же GL_TRIANGLES. Мы использовали его раньше для рисования треугольника как последовательности вершин. Для более сложных форм / поверхностей стандартный подход – это хранить вертексы в VBO безотносительно их порядка, а последовательность рисования […]

Глава 14. 3D координаты и Game Subjects

3D subject-ам понадобятся 3D координаты включая углы ориентации, или углы Эйлера – тангаж, рысканье, вращение (pitch, yaw, roll) в авиационной терминологии или курс, дифферент, крен (heading, attitude, bank) в морской. Мы начнем с углов Эйлера в градусах и в радианах и матрицы вращений (rotation Matrix). Назовем этот класс Coords. Windows 1. Запускаем VS. Открываем C:\CPP\a998engine\p_windows\p_windows.sln. […]

Глава 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. Потом нужна сама картинка. Создадим […]