AGAL 命令

 名称 opcode  操作  说明 
 mov  0×00 移动   将数据从 source1 移动到 destination
 add 0×01  相加   destination = source1 + source2
 sub 0×02  相减   destination = source1 – source2
 mul  0×03 相乘  destination = source1 * source2
 div  0×04  除以  destination = source1 / source2
 rcp  0×05  倒数  destination = 1/source1
 min  0×06  最小值  destination = minimum(source1,source2)
 max  0×07  最大值  destination = maximum(source1,source2)

destination = maximum(source1,source2)

 frc  0×08  分数  destination = source1 – (float)floor(source1)

destination = source1 – (float)floor(source1)

 sqt  0×09  平方根  destination = sqrt(source1)
 rsq  0x0a  平方根倒数  destination = 1/sqrt(source1)
 pow  0x0b  幂  destination = pow(source1,source2)
 log  0x0c  对数  destination = log_2(source1)
 exp  0x0d  指数  destination = 2^source1
 nrm  0x0e  标准化  destination = normalize(source1)
 sin  0x0f  正弦  destination = sin(source1)
 cos  0×10  余弦  destination = cos(source1)
 crs  0×11  向量积  destination.x = source1.y * source2.z – source1.z * source2.y

 destination.y = source1.z * source2.x – source1.x * source2.z

 destination.z = source1.x * source2.y – source1.y * source2.x

 dp3  0×12  点积  destination = source1.x*source2.x + source1.y*source2.y + source1.z*source2.z
 dp4  0×13  点积  destination = source1.x*source2.x + source1.y*source2.y + source1.z*source2.z + source1.w*source2.w

 abs

 0×14  取绝对值  destination = abs(source1),按组件
 neg  0×15   求反  destination = -source1,按组件
 sat  0×16  饱和  destination = maximum(minimum(source1,1),0),按组件
 m33  0×17  矩阵连乘3×3  destination.x = (source1.x * source2[0].x) + (source1.y * source2[0].y) + (source1.z * source2[0].z)

 destination.y = (source1.x * source2[1].x) + (source1.y * source2[1].y) + (source1.z * source2[1].z)

 destination.z = (source1.x * source2[2].x) + (source1.y * source2[2].y) + (source1.z * source2[2].z)

 m44  0×18  矩阵连乘4×4  destination.x = (source1.x * source2[0].x) + (source1.y * source2[0].y) + (source1.z * source2[0].z) + (source1.w * source2[0].w)

 destination.y = (source1.x * source2[1].x) + (source1.y * source2[1].y) + (source1.z * source2[1].z) + (source1.w * source2[1].w)

 destination.z = (source1.x * source2[2].x) + (source1.y * source2[2].y) + (source1.z * source2[2].z) + (source1.w * source2[2].w)

 destination.w = (source1.x * source2[3].x) + (source1.y * source2[3].y) + (source1.z * source2[3].z) + (source1.w *source2[3].w)

 m34  0×19  矩阵连乘3×4  destination.x = (source1.x * source2[0].x) + (source1.y * source2[0].y) + (source1.z * source2[0].z) + (source1.w * source2[0].w)

 destination.y = (source1.x * source2[1].x) + (source1.y * source2[1].y) + (source1.z * source2[1].z) + (source1.w * source2[1].w)

 destination.z = (source1.x * source2[2].x) + (source1.y * source2[2].y) + (source1.z * source2[2].z) + (source1.w * source2[2].w)

 kil  0×27  丢弃  如果单个标量源组件小于零,则将丢弃片段并不会将其绘制到帧缓冲区。 (目标寄存器必须全部设置为 0
 tex  0×28  纹理取样  destination 等于从坐标 source1 上的纹理 source2 进行加载。在这种情况下, source2 必须采用取样器格式
 sge  0×29  大于等于时设置  destination = source1 >= source2 ? 1 : 0
 slt  0x2a  小于时设置  destination = source1 < source2 ? 1 : 0
 seq  0x2c  相等时设置  destination = source1 == source2 ? 1 : 0
 sne  0x2d  不相等时设置

destination = source1 != source2 ? 1 : 0

 

 va 属性寄存器

很多人看到这个名字的时候都会认为va中应该存的是某一个对象的属性,或者一些其他什么东西。但实事并非如此。当你上载一些顶点数据之后,我们通过AS3来制定这些顶点所存在的位置,那么你就可以通过va来直接使用。举个简单的例子,在上一篇文章中,我们使用了va0,而va0的数据又是从etVertexBufferAt来直接指定的,所以在你编写代码的时候,你的AGAL和AS3有着直接的联系。

 vc 常量寄存器

顾名思义,与程序中的常量概念类似,这部分数据是从外部直接传递进来的,至于你如何使用完全取决于你自己。关于用法我们在后面会涉及到。

 vt 临时寄存器

应该说vt的概念最接近于我们程序中的变量,因为他可以被你临时读取,并且允许你在AGAL运行时来动态改变其中的数值。

 op 输出寄存器

好吧,当你吧所有的操作都完成后,那么你的结果应该有一个归宿,这个op就是你顶点数据最后的归宿。每次运行顶点数据后,你都应该看到op,否则你的程序运行后没有任何效果。

----------------------------------------------------------HOHO--------------------------------------------------------------

 fs 纹理采样寄存器

 教程到目前位置,我们还没有看到任何和贴图有关系的内容。不错,笔者打算将这部分内容放在后面讲解。因为还有不少好东西放在后面等着大家呢。这里简单解释一下,所谓纹理采样,则是调用你显存中的纹理数据。纹理我们可以理解为贴图,或者理解为你上载到GPU的那张图片。

 fc 常量寄存器

又遇到常量了。这里和刚才的vc其实是一样的,因为顶点和纹理这两部分的程序不可交叉访问,所以贴图也有自己的常量寄存器。

 ft 临时寄存器

和vt概念相同,但只用于纹理操作。

 oc 输出寄存器

和op相同,但只能用于纹理操作。

----------------------------------------------------------HOHO--------------------------------------------------------------

 v 插值寄存器

这是比较特殊的一个寄存器,因为刚才我们所说的8个寄存器类型只能在自己负责的领域操作,顶点的寄存器不可访问纹理的内容,同样,纹理操作中也无法访问顶点数据,那么如果他们的数据有交集如何呢?这里就体现了v的作用(当然,在微博中,v也是一种身份的象征)。v可以在在顶点操作中使用,也可以在纹理操作中使用。

转:http://ashan.org/post-309.html#comment-17360

 

posted @ 2013-01-21 12:18  晨祷  阅读(545)  评论(0编辑  收藏  举报