Эмуляция вложенного цикла в Pixel Bender для Flash / Flex
Автор вопроса: KizaruОтветов: 2
У меня есть два вектора большого, но произвольного (v1.length не обязательно равняется v2.length) количества точек, и я хочу их попарно умножить. Поскольку это основное узкое место в большом цикле кода AS3, я подумал, что попробую вытащить код и запустить его асинхронно через Pixel Bender. Теперь, чтобы представить данные, я бы использовал в качестве входных данных две переменные image2.
Как я могу получить пиксель одного изображения и произвести вычисления с каждым пикселем другого изображения? Я только изучаю Pixel Bender, поэтому я, возможно, упустил из виду некоторую работу для зацикливания.
РЕДАКТИРОВАТЬ: Возможно, мне нужно уточнить. Допустим, у меня есть что-то вроде этого
var v1:Vector.<Point> = ...;
var v2:Vector.<Point> = ...;
var result:Vector.<Point> = ...;
for (var i:int = 0; i < v1.length; ++i)
for (var j:int = 0; j < v2.length; ++j)
result[i] += v1[i] * v2[j];
Это вложенный цикл - как его смоделировать в Pixel Bender?
Я не совсем понимаю ваш вопрос, но похоже, что вы легко справитесь с этим с помощью Pixel Bender. AturSams 21.01.2014
Pixel Bender в Flash Player не поддерживает: -> циклы или управляющие структуры, кроме if и else.
Для меня это было настоящим обломом, когда я сам узнал об этом, и я думаю, что это серьезный провал со стороны Adobe.
Ответ 2 · рейтинг 1 · Community
Основная функция внутри ядра сгибания пикселей - это цикл, который вызывается для каждого отдельного пикселя, оцениваемого ядром. Вот ссылка на руководство о том, как делать именно то, что вы хотите (работа с несколькими входами).
<languageVersion : 1.0;>
kernel blendy
< namespace : "com.adobe.devnet.pixelbender";
vendor : "Kevin's Filters";
version : 1;
description : "mashes two inputs together";
>
{
input image4 src; //Input image 1 as image4 (RGBA)
input image4 src2; //Input image 2 as image4 (RGBA)
output pixel4 dst; //Single pixel data type/represents single pixel value (RGBA)
void evaluatePixel()
{
dst = sampleNearest(src,outCoord());
}
}
Обратите внимание, что два параметра sampleNearest - это исходное изображение и координаты пикселя для выборки. outCoord () Я считаю, что это просто текущий пиксель в цикле. Как уже упоминалось, evaludatePixel (насколько я понимаю) вызывается один раз для каждого пикселя, который существует во входных данных. Вот модифицированная версия приведенного выше кода (из ссылки), которая считывает значение обоих входов одновременно: