Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模拟Flash/Flex像素折弯机中的嵌套循环_Flash_Actionscript 3_Pixel Shader_Pixel Bender - Fatal编程技术网

模拟Flash/Flex像素折弯机中的嵌套循环

模拟Flash/Flex像素折弯机中的嵌套循环,flash,actionscript-3,pixel-shader,pixel-bender,Flash,Actionscript 3,Pixel Shader,Pixel Bender,我有两个大但任意的向量(v1.length不需要等于v2.length),点的数量,我想两两相乘。因为这是AS3代码大循环中的主要瓶颈,所以我想我应该尝试提取代码并通过Pixel Bender异步运行它。现在,为了表示数据,我将使用两个image2变量作为输入 如何从一幅图像中获取一个像素,并对另一幅图像的每个像素进行计算?我只是在学习Pixel Bender,所以我可能忽略了一些循环方面的工作 编辑:也许我需要澄清一下。假设我有这样的东西 var v1:Vector.<Point>

我有两个大但任意的向量(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];
var v1:Vector.=。。。;
变量v2:向量=。。。;
var结果:向量=。。。;
对于(变量i:int=0;i

这是一个嵌套循环——我如何在Pixel Bender中模拟它?

Pixel Bender内核中的主函数是一个循环,对于内核计算的每个像素都会调用它。这里有一个链接,指向一个教程,该教程介绍了如何准确地实现您的目标(使用多个输入)

从本质上讲,它只需要定义两个输入:

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

果仁白兰地
 
{
input image4 src;//将图像1作为图像4(RGBA)输入
input image4 src2;//将图像2作为图像4(RGBA)输入
输出pixel4 dst;//单像素数据类型/表示单像素值(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());
    }
}

果仁白兰地
 
{
input image4 src;//将图像1作为图像4(RGBA)输入
input image4 src2;//将图像2作为图像4(RGBA)输入
输出像素4 dst;//输出图像
void evaluatePixel()
{
dst=sampleNearest(src2,outCoord())+sampleNearest(src,outCoord());
}
}
以下两个视频教程将详细介绍pixel的工作原理:

闪光灯像素折弯机禁止使用循环和嵌套循环(内置循环除外)

我想pixelbender 3D是个例外,它是beta版,设计用于molehill API

编辑

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

第17页:

Flash Player中的像素弯曲器不支持: ->除if和else之外的循环或控制结构


当我发现自己的问题时,这对我来说是一个很大的麻烦,我认为这是Adobe方面的一个重大失败。

我用一个我想要的例子更新了我原来的问题。或者这就是为什么我看不出来?如果每个图像为4x4,evaluatePixel将只被调用16次,对吗?如果是这样的话,那么在同一时间只有一次通过每个图像,这不是我想要的。不幸的是,这就是你所能做的。看看我的新答案。你可以通过修改采样坐标直接访问其他像素,但你不能自己构建一个循环。我不完全理解你的问题,但这似乎是你可以用Pixel Bender轻松实现的。