суббота, 27 февраля 2010 г.

Реализована поддержка текстур некратных степени двойки на этапе отрисовки, текстурирование по свободным UV. На очереди загрузка из текстур некратных степени двойки, текстурные развертки и мультитекстурирование.

В процессе реализации шейдерный блок QuadShader. Пример работы тестового блока QuadShader - попиксельное освещение с нормалпеппингом, спекуряр меппингом и диффузной картой:


Использованы эти карты для теста:

понедельник, 15 февраля 2010 г.

Ограничение вывода. SetClipRect(x, y, x2, y2).

Движемся к полноценному фреймворку.
Добавлена функция переключения режимов альфа-смешивания.
Имея опыт разработки казуальных игр имею представление, что переключение режима обработки прозрачности для каждого спрайта - накладной и ненужный расход, поэтому переключение режима альфа-смешивания было вынесено в отдельную функцию:

Quad.SetBlendMode(jbmSrcAlpha);

При отрисовке, скажем, частиц, в кол-ве измеряемом тысячами, позволяет экономить ресурсы, хотя кода на строчку больше становится.
Добавился рендер в текстуру. Использование простое как 2 копейки:
После инициализации QuadRender делаем:
Quad.CreateRenderTexture(256, 256); // где 256 и 256 - размеры текстуры, соотвественно.
rendertarget := TQuadTexture.create(Quad); // создаем обычный класс TJoyTexture
rendertarget.CreateFromI(Joy3D.RenderTexture, 256, 256); // говорим ему использовать текстуру из под рендера.

Всё!

Далее нас ждет 2 блока
Quad.BeginRender;
Quad.EndRender;
В первом блоке идет рендер в текстуру (если надо), во втором основной.

Да, чуть не забыл. Первый блок обрамляется в:
Quad.RenderToTexture(True);
Quad.RenderToTexture(False);
чтобы дать понять фреймворку, что мы хотим рендерить в текстуру.

Пример работы (фиолетовый прямоугольник - рендер в текстуру):


Разумеется, с текстурой можно вытворять всё что угодно как и с любой другой во фреймворке. Вращать, блендить, масштабировать и т.п.

среда, 30 декабря 2009 г.

Сделал буферизацию вершин в промежуточном буфере в памяти. Получилось стрёмно, если рисовать все время разные текстуры, однако при отрисовки однотипных текстур прирост до двух раз в скорости. Пришлось подшаманить и сделать более хитрый алгоритм отрисовки. В целом прирост раза в полтора получился в скорости.

Следующий шаг - удобное масштабирование. Шкала выбрана из расчета 1 = истинный размер, 0 - нулевой, 2 - удвоеный. Тип масштаба - float.

четверг, 24 декабря 2009 г.

Реализовал загрузку из JPG файла с "интуитивной альфой". То есть на вот таком вот изображении:

будет прозрачным всё, что не черное. Цвет поддерживается только черный, чтобы не лез мусор от jpg артефактов - сделана дельта. от 1 до 765, позволяющая игнорировать близкие к черному оттенки.

Результат загрузки по этому методу выглядит вот так:



Слева вверху пример отрисовки спрайта с заданием цвета каждой вершине.

Для bmp, tga цветовой ключ, соответственно, можно будет задать любой... Возможно для jpg будет что-то вроде этого. Считаю крайне удобной фичей на стадии проектирования прототипа, когда отвлекаться на спрайты не хочется и нет времени.

среда, 23 декабря 2009 г.

В догонку сразу.
Из планируемых в ближайшее время фишек - менеджер загрузки. Это часть Quad engine, которая обеспечивает удобную интеграцию окна загрузки с процессом загрузки файлов.
Принцип работы - создается процедура OnLoading, в которой описана загрузка всех нужных программе ресурсов, и которая меняет один из параметров - PercentDone. Параметр необходим для индикации процесса загрузки. Эта процедура передается как параметр при создании менеджера загруки. Менеджер загрузки стартует эту процедуру и отслеживает переменную PercentDone. Процедура стартует в отдельном потоке, что дает возможность рисовать плавные анимации на экране в процессе загрузки. Как только процесс завершен, PercentDone становится равной 100.0 и менеджер загруки автоматически удаляется.
При создании менеджер загрузки вводит ограничение модулю QuadRender на кол-во кадров в секунду, который тот должен отрисовывать. По уничтожению - снимает ограничение. Это необходимо для того, чтобы загрузка не длилась очень долго. Для простейшего индикатора загрузки будет достаточно нескольких кадров в секунду. Для более сложных - 20-30.

Разумеется, менеджер загрузки можно создавать несколько раз, или даже несколько экземпляров одновременно, если имеется такая необходимость.