Глава 33. Пересечение полигонов

На всякий случай: мы все еще пытаемся “нарисовать” стык (щель) между пачкой и крышкой, как небольшую normal map приложенную к части существующей текстурированной поверхности. Как-то так: В предыдущей главе мы смогли пометить и переместить “marked vertices/triangles group“. Теперь нам надо выбрать одну (в этом примере – “box_right”), клонировать ее, развернуть и сдвинуть лицом к нам: Затем – […]

Глава 32. “Помеченные” группы вертексов

Теперь я хочу “нарисовать” стык (щель) между пачкой и крышкой, как normal map приложенную к части существующей поверхности, НЕ ко всей поверхности, и НЕ к VirtualShape как мы делали раньше. Это потребует нескольких новых концепций. Windows 1. Запускаем VS, открываем C:\CPP\a997modeler\p_windows\p_windows.sln. Первая из новых концепций – помеченные группы вертексов/треугольников, чтобы потом мы могли обратиться к какой-то […]

Глава 31. Карты нормалей / Normal maps

Теперь хочу сделать герб и надпись “Marlboro” на лицевой стороне тиснеными. Для этого понадобятся Карты нормалей / Normal Maps. Это голубые изображения справа: Чтобы их сгенерировать, я воспользовался сайтом NormalMap-Online. Настройки по умолчанию – для DirectX. Для OpenGL – отметьте Invert R Кликните на левую картинку чтобы загрузить свою. Эта картинка – уже в Вашем […]

Глава 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). Понятно, что на других устройствах эта цифра может быть другой. Кроме того, на скорость могут влиять фоновые процессы […]