最近发现pixel bender有两个特殊点:

1、Input Image4,不单单可以用BitmapData来初始化,也可以用Vector.<Number>初始化。
2、ShaderJob,可以使用Vector.<Number>接收pb的运算结果,同时,这个输出结果不限于[0-1]。结果会从上往下一行一行的把每个像素的各通道信息填入到Vector中
 
基于这两点,就可以发现,可以把复杂的数学运算交给pb。尤其是类似于图像这样二维的信息,例如3d建模中,水面波动的计算。
 
AS代码:
 
  1. var width :int = 3;
  2. var height:int = 3;
  3. var vector:Vector.<Number> = new Vector.<Number>;
  4. var counter:int = 1;
  5.  
  6. //利用vector作为input,需要从左上角到右下角,逐行逐行把每个像素的3通道信息,以3个Number形式表示
  7. for (var i:int = 0; i < width; i++)
  8. {
  9. for (var j:int = 0; j < height; j++)
  10. {
  11. vector.push(counter, counter, counter);
  12. counter++;
  13. }
  14. }
  15.  
  16. //目的是格式化输出,好看。。。
  17. for (var k:int = 0; k < vector.length; k+=3* width)
  18. {
  19. var array:Array = new Array();
  20. for (var i2:int = 0; i2 < width ; i2++)
  21. {
  22. array.push(vector[k+i2*3] + "," + vector[k+1+i2*3] + "," + vector[k+2+i2*3]);
  23. }
  24. trace(array.join(" "));
  25. }
  26.  
  27. trace ("=====================");
  28.  
  29. var shader:Shader = new Shader( new PbjClass() as ByteArray );
  30. shader.data.src.input = vector;
  31. shader.data.src.width = width;//这里必须指定width和height,否则出错
  32. shader.data.src.height = height;
  33.  
  34. var result:Vector.<Number> = new Vector.<Number>();
  35. //这里必须指定width和height,否则出错
  36. var job:ShaderJob = new ShaderJob(shader, result, width, height);
  37. job.start(true);
  38.  
  39. //目的是格式化输出,好看。。。
  40. for (var k:int = 0; k < result.length; k+=3* width)
  41. {
  42. var array:Array = new Array();
  43. for (var i2:int = 0; i2 < width ; i2++)
  44. {
  45. array.push(result[k+i2*3] + "," + result[k+1+i2*3] + "," + result[k+2+i2*3]);
  46. }
  47. trace(array.join(" "));
  48. }
 
 
输出结果:
 
  1. 1,1,1 2,2,2 3,3,3
  2. 4,4,4 5,5,5 6,6,6
  3. 7,7,7 8,8,8 9,9,9
  4. =====================
  5. 1,1,1 1,1,1 2,2,2
  6. 4,4,4 4,4,4 5,5,5
  7. 7,7,7 7,7,7 8,8,8
 
 
Pixel bender代码:
 
  1. <languageVersion : 1.0;>
  2.  
  3. kernel test
  4. < namespace : "Your Namespace";
  5. vendor : "Your Vendor";
  6. version : 1;
  7. >
  8. {
  9. input image3 src; //注意这里是3,不是4.如果是4的话,就会报错。着色器输入 src 没有足够的数据。因为as代码中初始化输入只是用了3元组
  10. output pixel3 dst;
  11.  
  12. void
  13. evaluatePixel()
  14. {
  15. float2 coord = outCoord();
  16. pixel3 px = sampleNearest(src, coord + float2(-1.0, 0.0));
  17. dst.x = px.x;
  18. dst.y = px.y;
  19. dst.z = px.z;
  20. }
  21. }

妙用Pixel bender执行复杂运算/普通数据运算 传递Vector数组的更多相关文章

  1. Flash pixel Bender学习笔记

    pixel Bender是指用来创建,编译,测试和导出pixel shader,用于各种flash产品的一个IDE. Pixel Bender是Adobe推出的一个高性能的图像视频处理技术.它能跨平台 ...

  2. [转]c# 对密码执行散列和 salt 运算方法

    本文转自:http://www.cnblogs.com/CnBlogFounder/archive/2008/07/04/1235690.html 大家对密码执行散列和Salt运算一定不陌生.两个Vi ...

  3. python基础2(数据类型、数据运算、for循环、while循环、列表)

    1.数据类型 python使用对象模型来存储数据,每一个数据类型都有一个内置的类,每新建一个数据,实际就是一个对象,即所有数据都是对象. 对象的3个特性: 身份:即内存地址,可以用id()来获取 类型 ...

  4. 学习 opencv---(10)形态学图像处理(2):开运算,闭运算,形态学梯度,顶帽,黒帽合辑

    上篇文章中,我们重点了解了腐蚀和膨胀这两种最基本的形态学操作,而运用这两个基本操作,我们可以实现更高级的形态学变换. 所以,本文的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和 ...

  5. 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  6. C 运算符, 有符号数据运算,

    1.  b++运算 ; ; a = b++ + b++;printf("a=%d\n",a);printf("b=%d\n",b); 输出结果: a=3 b=3 ...

  7. Python之旅Day1 数据类型初识(数字|字符串|列表|数据运算) 编码 表达式(if...else|for|while)

    初识PYTHON Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(吉多·范罗苏姆)于 ...

  8. Python基础(2)——列表、字典、数据运算

    1.列表 #创建列表 name_list = ['alex', 'seven', 'eric'] #或 name_list = list(['alex', 'seven', 'eric']) #访问列 ...

  9. python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环

    开启python之路 内容概要: 一.python介绍 二.安装 三.第一个python程序 四.变量和字符编码 五.用户输入 六.数据类型 七.一切皆对象 八.数据运算 九.if else 流程判断 ...

随机推荐

  1. Focal Loss(RetinaNet) 与 OHEM

    Focal Loss for Dense Object Detection-RetinaNet YOLO和SSD可以算one-stage算法里的佼佼者,加上R-CNN系列算法,这几种算法可以说是目标检 ...

  2. Visitor 访问者模式 MD

    访问者模式 简介 访问者模式是设计模式中相对比较复杂的一个,项目中可能见得非常少. 定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下,定义作用于这些元素的新的操作. 表示 ...

  3. kafka 主要内容介绍

    1.       kafka介绍 1.1.       主要功能 根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能: 1:It lets you publish and ...

  4. cmd怎么删除Oracle数据库中的用户实例

    Oracle数据库使用过程中,针对系统都会建立独立的数据库用户,但有些时候处于测试或别的原因需要删除,原来的DB用户,这时我们可以使用下面的办法. 下属操作的前提是——确保数据库服务及监听均处于启动状 ...

  5. vue嵌套路由总结

    嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思. 比如在vue中,我们如果不使用嵌套路由,那么只有一个<router-view>,但是如果使用,那么在一 ...

  6. [javase学习笔记]-6.4 成员变量与局部变量

    前面我们学习了类的定义,我们不难理解,定义类事实上就是在定义类中的成员. 成员包含成员变量和成员函数. 说到成员变量,我们非常自然会想到前面提到过的局部变量,那么它们之间有什么差别呢? 首先我们定义一 ...

  7. 开源ckplayer 网页播放器去logo去广告去水印修改

    功能设置介绍 本教程涉及到以下各点,点击对应标题页面将直接滑动到相应内容: 1:修改或去掉播放器前置logo 2:修改或去掉右上角的logo 3:修改.关闭.设置滚动文字广告 4:去掉右边的开关灯分享 ...

  8. Wide and Deep Learning Model

    https://blog.csdn.net/starzhou/article/details/78845931 The Wide and Deep Learning Model(译文+Tensorlf ...

  9. 条件随机场 (CRF) 分词序列谈之一(转)

    http://langiner.blog.51cto.com/1989264/379166 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...

  10. 转: gcc 指定运行时动态库路径

    gcc 指定运行时动态库路径 Leave a reply 由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录 ...