PixelBender开发人员指南.docx
《PixelBender开发人员指南.docx》由会员分享,可在线阅读,更多相关《PixelBender开发人员指南.docx(34页珍藏版)》请在三一办公上搜索。
1、Pixel Bender工具包概述开始编写Pixel Bender滤镜本章讨论Pixel Bender语言编写的特殊功能。一个内核部分在Pixel Bender图像处理的基本单位是内核。每个像素机核心语言程序定义了一个内核,由一个单一的字符串,包含语言版本的内核语句中指定的元素。所需要的语言版本的元素kernel namekernel members变量和函数包括在这对花括号内内核语句包含一个名字,一组元数据的方括号中,描述了内核,和一组成员的花括号括起来的定义的过滤操作内核的数据元素每一个内核定义之前需要的语言版本的元素。这个声明和元数据部分(可以修改)被提供时自动创建在Pixel Bend
2、er工具包IDE的一个新的过滤器。元数据部分提供命名空间,内核版本,和其他的识别和描述信息。这是特别重要的是当你收集的几个内核的图形来执行更复杂的操作。比如说呢。命名空间,供应商,和版本值是必需的;说明是可选的。1. 供应商的公司或个人谁写的筛选器名称。2他是一个版本的整数版本号应该开始在1增加了新的内核版本。这允许你产生一个错误修正或改进性能的滤波器的新版本,但仍让老版本3. 命名空间是一个公司或作者进一步分离过滤器。例如,Adobe可能对PS图象处理软件高斯模糊滤镜不同版本和之后的效果,和使用的命名空间中的领域产品的名称来区分它们。kernel GaussianBlur / . 高斯模糊滤
3、镜所使用的PS图象处理软件kernel GaussianBlur / . 高斯模糊滤镜所使用的后效应命名空间中的值与其他过滤标识符的组合来确定实际的命名空间,因此不需要全局唯一的。在这一章简短,只有内核名称和构件截面显示;尝试的例子,你可以粘贴到内核内核构件截面定义包含一个语言版本的声明和元数据段。核心成员一个内核定义像C+中的类的成员变量和成员函数,与核心成员的部分包含一系列的声明,和一组函数定义。每一个内核必须提供至少evaluatepixel()功能和类型的像素的至少一个输出参数。最简单的Pixel Bender程序由一个内核,返回一个坚实的色彩无处不在:kernel FillWithB
4、lackoutput pixel4 dst;region generated()return everywhere();void evaluatePixel()dst = pixel4(0,0,1,0);这个内核产生一个输出图像的四通道(红,绿,蓝,),如通过申报输出pixel4 dst的定义。因为一个内核的所有像素的图像的每个像素执行输出,输出参数定义了一个完整的图。Pixel Bender是强类型语言。除了标准的数字(标量)类型,它定义了一组用于像素,1,2,3的图像向量类型,或4的成员,或通道。作为一个完整的清单和Pixel Bender数据类型的描述,看看Pixel Bender参考。
5、参数和变量在申明定义函数前,你可以指定参数,这是通过内核程序和固定的值,依赖变量,使用evaluateDependents()函数,它们仍然是只读,见本教程36页一个核可以采取任意数量的任意类型的参数。参数被传递到Pixel Bender运行系统,和它们的值在所有像素的常数,就象“均匀”用在三维着色语言变量。应用程序的内核运行提供一个用户界面中,用户可以设置的参数值。例如,它可以显示一个对话框,当过滤器被调用。在开发过程中,Pixel Bender工具包提供这个用户界面。此示例将一个参数的fillwithblack内核,它定义了一个用来填充黑色以外的其他颜色:kernel FillWithCo
6、lorparameter pixel4 color;output pixel4 dst;region generated()return everywhere();void evaluatePixel()dst = color;记住,所有Pixel Bender程序必须指定Pixel Bender核心语言的版本他们所写的,使用languageversion声明。试试这个代码,粘贴到一个内核程序包含必要的基础设施。参数的数据类型提供了一个线索,什么样的控制主机的应用,适当的参数设置值。你通常添加约束,有助于参数值甚至更多。例如,这个参数定义允许用户界面显示的最小值和最大值允许的值,以及初始默认值
7、parameter pixel4 color ;Pixel Bender坐标系统Pixel Bender有一个单一的世界坐标系统(有时被称为世界空间)。世界坐标系是方形的,均匀的(各向同性,笛卡尔,和正交),和无限的。X轴增加向右,Y轴向下增加输入和输出图像的起源是对齐到世界坐标系的原点。在Pixel Bender模型,图像没有大小。相反,每个图像被认为是定义,在离散的像素无限平面坐标。Pixel Bender运行时引擎执行内核决定需要存储和操作上的像素缓冲区大小。只有个别Pixel Bender有一个尺寸。这Pixel Bender坐标模型对滤波器设计的影响。例如,它是不可能写的一个反映在其
8、“中心图像像素机内核,“因为中心是未定义的。而不是,该中心的坐标必须明确表示通过它们作为内核参数(参见“通过在坐标”在30页)。没有坐标转换是可能的;一个是Transformedbybeing明确形象resampledto the输出网格这可能很严厉的限制,但它怎样到原子图像处理在实践操作必须执行更复杂的推理关于坐标系统,如连接和重新排序顺序执行的转换-must beofat ahigherlevel,before内核执行访问的像素坐标一个核心是并行执行的所有像素的输出图像,具有完全相同的参数值或每个像素。在每一像素的变化是当前输出像素坐标唯一。访问当前坐标值,使用内置的功能outcoord(
9、)。这个函数返回一个值float2型(两个浮动向量),给出了(x,y)的输出像素的中心坐标被evaluatepixel()功能的当前调用评估。输出电流协调各不相同的图像的像素,但不变的任何一个打电话的寿命期间evaluatepixel()。如果我们假设像素的平方(它们不一定;看到“非正方形像素”在33页)的outcoord()函数返回这些值为43像素的图像输出: 下面的示例是如何演示outcoord()函数,用它来产生输出图像中的图案。它也说明了矢量型float2使用和向量函数length()。Pixel Bender核心语言包括一组丰富的载体的类型和操作的详细信息,参见;Pixel Bend
10、er参考。这个内核提供一个(非抗锯齿)以原点为中心的实心圆,使用颜色和半径比参数:kernel t1 parameter float radius; parameter pixel4 color ; input image4 src; output pixel4 dst; void evaluatePixel() float2 coord_for_this_pixel = outCoord(); float cur_radius = length(coord_for_this_pixel); if (cur_radius radius) dst = color; else dst = samp
11、leNearest(src, coord_for_this_pixel); 通过在坐标这个内核呈现圆一个指定的大小和颜色,而是围绕圈在原点,你通过一个水平和垂直的圆的圆心坐标。kernel t1 parameter float2 center ; parameter float radius ; parameter pixel4 color ; input image4 src; output pixel4 dst; void evaluatePixel() / where are we relative to the center of the circle float2 coord_for
12、_this_pixel = outCoord() - center; float cur_radius = length(coord_for_this_pixel); if (cur_radius radius) dst = color; else dst = sampleNearest(src, coord_for_this_pixel + center); 输入图像和采样一个没有图像输入的内核被称为源或发电机。一个实际的例子是一个程序纹理的常规发电机。然而,大多数内核需要一个或多个图像输入。你可以声明一个或多个输入图像到一个内核访问,然后通过图像像素值和像素坐标的内置采样功能:sample
13、Nearest()返回该像素的中点为最近的给定的坐标值sampleLinear()双线性插值四像素相邻的给定的协调执行简单的可能的内核采样叶片图像不变:kernel Identityinput image4 source;output pixel4 dst;void evaluatePixel()dst = sampleNearest( source, outCoord() );你能提供任何坐标采样功能;然而,如果你的样本图像定义的区域外的一点,该函数返回透明黑(0,0,0,0)。所有的采样函数返回完全相同的信道数的像素值为通过图像。非正方形像素当你认为像素广场,一个图像的像素网格总线与潜在的
14、世界坐标空间:然而,事实上,像素不总是广场。例如,作用通常涉及视频图像具有非正方形像素后。如果是1.1x 1像素高,像素网格不与世界线空间:尽管该像素的大小已更改,所有的坐标都仍然在世界坐标系统。例如,返回的值为43像素的图像outcoord()现在的这个样子:在内核中,所有的坐标都在世界坐标空间。这包括:1、 outcoord()函数的返回值2、 坐标传递到采样功能3、 该地区通过从区域功能,还包括needed(),changed(),generated(),和dod()任何参数传递给内核,测量距离或区域(如一个模糊半径)也应该被指定在世界坐标系。一个核可以假设,输出图像的像素大小将作为第一
15、输入图像的像素尺寸相同。除此之外,然而,它不能选择或制作的像素大小的假设任何输入或输出图像。所有的输入图像和输出图像的像素大小可以不同。发现任何输入或输出图像的像素大小,使用pixelsize()和pixelaspectratio()功能。1、内置函数pixelsize()返回像素的大小对于一个给定的输入或输出图像。结果是测量世界的像素坐标大小。2、内置函数pixelaspectratio()获取像素宽度除以像素高度为一个给定的图像pixelAspectRatio( i ) = pixelSize( i ).x / pixelSize( i ).y一个正方形的像素具有1的纵横比。快讯:在pix
16、elsize()和pixelaspectratio()功能的Flash Player可用;然而Flash播放器都采用11像素。如果有可能,在你的图像的像素不是正方形的,你必须以像素大小为帐户来保证精确的采样结果。要选择相邻的像素,例如,得到的像素大小输入图像和用它来修改你的坐标,通过采样函数。例如,该核平均每个像素与它的直接的左和右的邻居,产生一个轻微的水平模糊:kernel HorizontalAverageinput image4 source;output pixel4 result; void evaluatePixel()float2 coord = outCoord();float
17、2 hOffset = float2(pixelSize(source).x, 0.0);pixel4 left = sampleNearest(source, coord - hOffset);pixel4 center= sampleNearest(source, coord);pixel4 right = sampleNearest(source, coord + hOffset);result = (left + center + right)/3.0;这个例子使用evaluatedependents()变半径,已经提供了世界坐标转换为半径测量在适当大小的像素:kernel t1 in
18、put image4 src; output pixel4 dst; parameter float radius ; dependent int intRadius; dependent float weights 100 ; void evaluateDependents() float w = 1.0 / float( radius ); float s = w / float( radius ); intRadius = int( ceil( radius / pixelSize(src).x ) ); weights 0 = w; for( int i = 1; i = intRad
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PixelBender 开发人员 指南
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-1894236.html