Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Качественное смешивание текстур

2.7K
16 ноября 2006 года
alexeyvnikitin
96 / / 11.10.2004
Задача следующая: имеется около 20 картинок 512x512, которые необходимо смешать, в том числе и с отрицательными коэффициентами. Проблема состоит в том, что если использовать цвета вершин, то 256 градаций альфа-канала совершенно не хватает.
Тогда можно использовать 128-битный формат текстур и каждый раз менять альфу, но данный подход оказывается слишком медленным.

Возможно ли решить поставленную задачу?
9
19 ноября 2006 года
Lerkin
3.0K / / 25.03.2003
Как вариант: использовать расширения OpenGL (если видеокарточка с драйверами их поддерживает).
Размеры картинок удобные, кратные 2-ке. Хотя потребуются дополнительные телодвижения с получением смикшированного изображения текстур из видеопамяти обратно, что скажется на скорости. Хотя, как я понял, скорость здесь не критична.

Такой вариант подходит? Если да, то могу кинуть вариантик решения, не сразу правда. ;)
2.7K
14 марта 2007 года
alexeyvnikitin
96 / / 11.10.2004
О, как-то пропустил ответ, прошу прощения. Благодарю за предложение помощи.
Решение в итоге было принято такое: из всех изображений составлялась одна volume-текстура, все коэффициенты загонялись в одномерную текстуру. Непосредственно сложение производилось в цикле в пиксельном шейдере.
Итого это есть перемножение матрицы на вектор (набор исходных текстур - строки матрицы, коэффициенты - столбец). Далее была предпринята попытка обобщить данную процедуру на случай матриц произвольного размера, в конкретном случае примерно 15000 x 50 и 50 x 15000. В первом случае проблему ограничение размера текстуры (у меня 2048) решилась просто: разбиваем матрицу на вертикальные куски и перемножаем несколько раз. Но со вторым возникли проблемы: на данный момент существует аппаратное ограничение на длину цикла - 256, и поэтому накладные расходы вносят ощутимый вклад в быстродействие (около 60 групп операций нарисовать и lock/unlock на одно перемножение). Дальше есть вариант много раз вызывать непосредственно рисование, "дописывая" результат в результирующую текстуру, но при этом необходимо использовать 32-битный blending, что, на сколько я знаю, поддерживается только 8-й серией GeForce. Поэтому пока небольшой стопор.

Забыл добавить: скорость критична, иначе бы можно было спокойно это сделать на CPU
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог