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