PixelBenderで簡単なマトリックスのサンプルを作ってみた。

PixelBenderで簡単なマトリックスのテスト(移動・回転・拡大)のサンプルを作ってみました。

float3x3ってなんだろうって調べてたら、これって行列だね。
FlexでのMatrixの説明

っにしてもPixelBenderの先は長そう・・・。
ソースはこちら↓

<languageVersion : 1.0;>
kernel MatrixSample
<   namespace   : "komugi";
    vendor      : "moeten.info";
    version     : 1;
    description : "matrix sample";
>
{
    parameter float theta <
        minValue     : 0.0;
        maxValue     : 6.28;
        defaultValue : 0.0;
    >;
    parameter float2 pmove<
        minValue     : float2( 0.0 );
        maxValue     : float2( 100.0 );
        defaultValue : float2( 0.0 );
    >;
    parameter float2 pscale<
        minValue     : float2( 0.001 );
        maxValue     : float2( 2.0 );
        defaultValue : float2( 1.0 );
    >;
    //input output image
    input  image4 src;
    output pixel4 dst;
    //main function
    void
    evaluatePixel()
    {
        float3x3 translate = float3x3(
            1,0,pmove.x,
            0,1,pmove.y,
            0,0,1
        );
        float3x3 scale = float3x3(
            1.0/pscale.x,0,0,
            0,1.0/pscale.y,0,
            0,0,1
        );
        float3x3 rotate = float3x3(
             cos(theta) , sin(theta),0.0,
            -sin(theta) , cos(theta),0.0,
                    0.0 ,        0.0,1.0
        );
        // inverce rotation
        rotate[0][1] = - rotate[0][1];
        rotate[1][0] = - rotate[1][0];
        //set new point cal matrix
        float2 nowP = outCoord();
        nowP =( float3( nowP.x , nowP.y , 1.0 ) * translate * rotate * scale ).xy;
        //out put image from new point
        dst = sampleNearest( src , nowP );
    }
}