1

大きいが任意の (v1.length が v2.length である必要はない) ポイント数の 2 つのベクトルがあり、それらをペアワイズ乗算したいと考えています。これは AS3 コードの大規模なループの主なボトルネックであるため、コードを取り出して、Pixel Bender を介して非同期で実行しようと考えました。ここで、データを表すために、2 つの 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

基本的には、2 つの入力を定義するだけです。

<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 の 2 つのパラメーターは、ソース イメージと、サンプリングするピクセルの座標であることに注意してください。outCoord() は単にループ内の現在のピクセルだと思います。前述のように、evaludatePixel (私の理解では) は、入力に存在するピクセルごとに 1 回呼び出されます。両方の入力の値を同時に読み取る上記のコード (リンクから) の修正版を次に示します。

<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());
    }
}

ピクセルがどのように機能するかについて詳しく説明する 2 つのビデオ チュートリアルを次に示します。

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

フラッシュ用のピクセル ベンダーでは、ループおよびネストされたループ (組み込みのものを除く) は禁止されています。

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

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

例外は pixelbender 3D だと思います。これはベータ版で、モレヒル 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 以外のループまたは制御構造。

これは、私が自分自身を知ったとき、本当にがっかりしました。これは、アドビ側の大きな失敗だと思います。

于 2011-07-23T00:45:43.003 に答える