zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/mattins/p/2869549.html
Copyright © 2011-2022 走看看