Глава 30. Манипуляции группой вертексов

Здесь я зочу добавить золоченые принты на пачке. Для этого понадобится по ходу изменять (подправлять) размеры и позиции проекций. Новый root01.txt будет такой: 1. Скопируем этот код в Текстовый редактор и сохраним его (overwrite) to/as C:\CPP\a997modeler\dt\models\misc\marlboro01\root01.txt Обратите внимание: В тагах “a” теперь есть новые параметры/properties: whl (измененный размер) и pxyz (позиция прекции). “x” в размерах/координатах означает использовать […]

Глава 29. Chroma key

Chroma keying, понятно, это способ считать какой-то конкретный цвет прозрачным. В нашем случае – зеленый: Конечно, после загрузки изображения, перед тем как сделать из него текстуру, мы можем легко просканировать его на предмет зеленых пикселей, и установить их Альфа-каналы в ноль. Правда, когда GL rasterizer выбирает tUV координаты рядом с зеленой зоной, результирующий пиксель на […]

Глава 28. Загрузчик моделей / Model Loader

Наша следующая задача – вынести (убрать) построение модели за пределы TheGame класса. Нам нужно создать какой-то текстовый описатель (text descriptor) модели, XML формат кажется вполне подходящим. Мы будем держать описания моделей за пределами экзешника, в каталоге /dt. Еще нам понадобится класс, который будет их загружать, читать, обрабатывать и строить соответствующие 3D модели в памяти. У […]

Глава 27. Группы шейдеров

Здесь я хочу добавить “reflection” (отражение) и “over mask” (трафарет) шейдеры, каждый из которых удвоит количество шейдер-программ. Соответственно, нужна функция, которая сможет загрузить группу шейдеров в 1 присест (например – Phong или flat для разных форматов данных). Также понадобится функция, которая выберет конкретный номер шейдера в зависимости от Материала (например – flat, ucolor, без текстур). […]

Глава 26. Рендер в и чтение из GL текстуры

Здесь я хочу сгенерировать белый шум посложнее: с более крупными точками и с размывкой между ними. Задача разбивается на следующие шаги: Создать простое черно-белое изображение (как в предыдущей главе) Сгенерировать из него GL текстуру Сделать ее renderable (связать ее с render buffer-ом) Направить GL рендер в новый render buffer Нарендрить туда случайных черно-белых больших точек […]

Глава 25. Запись BMP и TGA файлов

Для последующего использования я хотел сгенерировать несколько картинок с “белым шумом” и сохранить их в каком-то узнаваемом формате. Чтобы не перегружать проект лишними библиотеками, решил написать собственную маленькую функцию. Ради простоты – без компрессии и только с одним форматом пикселя – RGBA. Подойдут 2 варианта: BMP и TGA. BMP – пораспространенней, TGA – попроще. Правда, […]

Глава 24. Синхронизация

Сейчас на обоих моих платформах (Android и PC) кубик делает 1 оборот примерно за 4 секунды. Это 360 кадров (скорость вращения установлена на 1 градус за кадр). Это значит 360/4=90 кадров в секунду (frames per second, FPS). Понятно, что на других устройствах эта цифра может быть другой. Кроме того, на скорость могут влиять фоновые процессы […]

Глава 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 координаты для каждого вовлеченного […]