1

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

4

2 回答 2

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() 我相信只是循环中的当前像素。如前所述,每个输入中存在的像素都会调用一次evaluatePixel(据我所知)。这是上述代码的修改版本(来自链接),它同时读取两个输入的值:

<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

于 2011-07-22T23:39:45.340 回答
1

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

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

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

我猜是 pixelbender 3D 是个例外,它处于测试阶段,旨在与 molehill API 一起使用。

编辑

以下是 Adob​​e 官方文档的链接,它们明确确认了上述内容:

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

从第 17 页开始:

Flash Player 中的 Pixel Bender 不支持: -> if 和 else 以外的循环或控制结构。

当我发现自己时,这对我来说真的很糟糕,我认为这是 Adob​​e 的重大失败。

于 2011-07-23T00:45:43.003 回答