Глава 23. #ifdef в шейдерах

Сейчас у нас 6 шейдеров (3 vertex+fragment пары), которые генерируют 3 шейдер-программы. Теперь нам надо добавить текстурированный Фонг шейдер, потом понадобятся цвет или текстура поверх маски прозрачности (трафарет) для обоих flat и phong случаев, что удвоит число шейдеров, и так далее, и скоро будет сложно их всех отслеживать. Причем, в основном это будут просто разные […]

Глава 22. Изменение размеров экрана

При смене размеров экрана надо переустановить камеру так, чтобы сцена оптимально заполнила новые размеры. Например, в нашем случае желаемый размер сцены, скажем, 500×300 (чтобы кубик вписывался в экран). Угол зрения камеры у нас 30 градусов. значит, ? / 250 = косинус(15) / синус(15) = котангенс(15) ? = 250 * котангенс(15) = 250 * 3.73 = […]

Глава 21. Текстурированная поверхность

Теперь давайте наложим текстуру на более сложную много-вертексную поверхность, на правую (синюю) строну например. Надеюсь, понятно как написать текстурированный Phong шейдер, но мы сделаем это как-нибудь в другой раз. Пока обойдемся и простым (без света, который у нас уже есть). Нам понадобится: передать желаемые координаты изображения в Modeler и вычислить tUV координаты для каждого вовлеченного […]

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