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 6131
Cross-platform 3D – Page 2 – Игра в Написание Игры

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