在Pixel Bender中为Flash / Flex模拟嵌套循环

时间:2011-07-22 20:34:14

标签: flash actionscript-3 pixel-shader pixel-bender

我有两个大的矢量,但任意(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中模拟它?

2 个答案:

答案 0 :(得分:1)

像素弯曲内核中的主要功能是一个循环,并且被内核评估的每个像素调用回来。这是一个教程的链接,指导您如何准确地使用(使用多个输入)。

http://www.adobe.com/devnet/pixelbender/articles/creating_effects_pt09.html#articlecontentAdobe_numberedheader

基本上,它只是定义了两个输入:

<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(根据我的理解)在输入中存在的每个像素调用一次。以下是上述代码的修改版本(来自链接),它同时读取两个输入的值:

<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; //Output image

    void evaluatePixel()
    {
       dst = sampleNearest(src2,outCoord()) + sampleNearest(src, outCoord());
    }
}

以下是两个视频教程,它们将详细介绍像素的工作原理:

http://gotoandlearn.com/play.php?id=83

http://gotoandlearn.com/play.php?id=84

http://www.gotoandlearn.com/play.php?id=95

答案 1 :(得分:1)

闪存中的像素弯曲器禁止循环和嵌套循环(除内置循环外)。

http://forums.adobe.com/thread/840318

http://blog.leeburrows.com/2011/02/pixelbender-filters-3/

我认为例外是pixelbender 3D,它处于测试版状态,旨在与molehill API一起使用。

修改

以下链接是官方Adobe文档,明确确认上述内容:

http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pixelbender/pdfs/pixelbender_guide.pdf

从第17页开始:

Flash Player中的Pixel Bender不支持: - &GT;除了if和else之外的循环或控制结构。

当我发现自己时,这对我来说是一个真正的无聊,我认为这是Adobe的一个重大失败。