记录作者:Jave.Lin

原贴:http://blog.csdn.net/linjf520/article/details/8758954

首先:AGAL缩放的,全拼意思:Adobe Graphics Assembly Language:Adobe 图形图像汇编语言

先记录一下:常用的寄存器的名称表列(缩写=>全拼),大部份名称都是按自己的喜欢来定而使用,因为用在不一样的公式,计算,都会用不一样的结果:

顶点着色器(Vertex Shader/Program)

va=>Vertex Attribute=>直译:顶点属性;

vc=>Vertex Constant=>直译:顶点常量,一般常量都不可以再改,但这里我们在CPU层上,是怎么改都可以的;但便与我们在使用AGAL中的习惯来用;

vt=>Vertex Temporary=>直译:顶点临时变量,同上,也是习惯而用;

op=>Output Position=>直译:顶点输出位置,在“顶点着色器”的代码中都有用到的寄存器名称;存放最终GPU用于渲染时的顶点位置数据变量

片段着色器(Fragment Shader/Program)

fc=>Fragment Constant=>直译:片段常量;

ft=>Fragment Temporary=>直译:片段临时变量;

fs=>Fragment Texture Sampler=>直译:片段纹理采样(采样:你懂的,不懂就百度一下)

oc=>Output Color=>直译:片段输出颜色:存放最终决定渲染时的像素颜色数据变量;

向量、矩阵的操作码

1、m44的用法:

m44 dest, v, m

dest=>Vector3D(x,y,z,w);

v=>Vector.<Number>[x,y,z,w];

m=>Vector.<Number>(

[

m11,m12,m13,m14,

m21,m22,m23,m24,

m31,m32,m33,m34,

m41,m42,m43,m44

]

);

m44 运算是,展开来看,就是下面的过程;

dest.x=v.x*m.m11+v.y*m.m12+v.z*m.m13+v.w*m.m14;

dest.y=v.x*m.m21+v.y*m.m22+v.z*m.m23+v.w*m.m24;

dest.z=v.x*m.m31+v.y*m.m32+v.z*m.m33+v.w*m.m34;

dest.w=v.x*m.m41+v.y*m.m42+v.z*m.m43+v.w*m.m44;

作用是:将v顶点的原数据,与m矩阵转换(点乘、点积,或是理解成:m有4个顶点,每个点与v点积的结果,等于第N维对应的数据)后的结果,存放到:dest顶点中

示例:

以下是assemble(programeType,agalStr)方法中agalStr就是AGAL:var vertexShaderAssembler:AGALMiniAssembler = new AGALMiniAssembler();vertexShaderAssembler.assemble(Context3DProgramType.VERTEX,// 4x4矩阵乘以相机角度"m44 op, va0, vc0\n"+// 告诉片段着色器x,y,z的值//"mov v0, va0\n"+//因为:v0在片段着色器中没有用到,先暂时注释掉// 告诉版段着色器u,v的值"mov v1, va1\n");var fragmentShaderAssembler:AGALMiniAssembler = new AGALMiniAssembler();fragmentShaderAssembler.assemble(Context3DProgramType.FRAGMENT,// 使用存于v1中的u,v坐标,从纹理fs0中取得纹理的颜色"tex ft0, v1, fs0 <2d, repeat, miplinear>\n"+// 使用fc0 烘焙 颜色到纹理
//              "mul ft1, fc0, ft0\n"+//mul dest, src1, src2中,src1与src2的位置是可以无序的;加、乘法,都可以交换的,大家都懂的;其它的就不一样喔;"mul ft1, ft0, fc0\n"+// 将结果输出"mov oc, ft1\n");如何在CPU层上的代码设置呢?va0,vc0,va1,fs0,等;如下:// set va0, position register  : x, y ,zcontext3D.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3);// set va1, color register        : r, g, b, acontext3D.setVertexBufferAt(1, vertexBuffer, 3, Context3DVertexBufferFormat.FLOAT_3);// set fs0, texture sample registercontext3D.setTextureAt(0, myTexture);// set fc0 valuecontext3D.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT,0,Vector.<Number>([Math.sin(t/60), Math.sin(t/10), 1, 1]));

最后自己总结:

AGAL,的语法取决于,这个编译器:

AGALMiniAssembler.as

这个类可以在官网,或是其它地弄成到,总之,大家去搜一下总弄找到;(最简单,直接对GitHub,肯定有)

而这个迷你编译器,最后是把我们输入的字符串“如: vs : "m44 op va0 vc0", fs/ps "move oc fs0";(其实很个m44,dp3,dp4,add,mul,move,等这些命令,到最后,都为转码ByteArray的一个OpCode:操作码,的标识,具体值,我看文档介绍也没有,不过你可以参考:AGALMiniAssembler.as内的代码,里面有对应的枚举定义)

这两个shader都是最后编译成:ByteArray,然后通后,底层的Stage3D.Context3D.program.unload(ByteArray);

也就说,我们可以完也不用官网的这个迷你编译器;而自己写一个;

不过这个你得先了解,这个ByteArray的结构,与Stage3D.context.program,与别的HLSL,或是GLSL有什么支持与不支持的关系;

这样你就完全可以自己写一个基于:Stage3D 的GPU汇编语言了;

如果你能否强大于,可以写个:这个语言的IDE,像VS那么厉害,可以高亮代码,智能提示,调试,那就不得了了;

至于,program接受你传的ByteArray操作码的二进制数据结构,你可以参考我这里提供的两个.pdf:

以别的CG语言与AGAL的简单比较

官方提供的AGAL的ByteArray结构

最后,给大家一些AGAL基础相关,比较有用的网址:

A闪网:(个人比较推荐这个,说得挺详细易懂,大部都是源码注释+博文说明)

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

官方网的一些文章:(中文滴喔,大家好好看这个)

http://www.adobe.com/cn/devnet/flashplayer/articles/what-is-agal.html

Flashache:

http://www.flashache.com/2012/09/19/stage3d-agal-intro-1/

纳金网,3D分栏:--AGAL语法,其实就是别的英文文档的翻译

http://www.narkii.com/club/thread-297505-1.html

以上大部分的中文.pdf都是英文翻译资源;

建议大家都看英文文档;

唉,现在才知道,以前没学好,英文,数学,物理,是多悲催的一件事;

AGAL 的学习记录相关推荐

  1. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  2. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  3. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  4. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  5. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  6. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  7. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX

    Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...

  8. java之字符串学习记录

    java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...

  9. Redis的学习记录

    Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...

最新文章

  1. HP存储raid5两块硬盘离线lvm下vxfs文件系统恢复数据过程
  2. MySQL-binlog格式对主从复制的影响MySQL主从复制的过程
  3. 苹果6s解除耳机模式_出大问题!苹果或将砍掉3D Touch?
  4. rdp协议打开 windows_ubuntu客户端使用RDP协议连接windows服务器
  5. Laravel学习笔记(四)数据库 数据库迁移案例
  6. Docker最全教程——从理论到实战(九)
  7. 实时体积云渲染(地平线):二.Perlin噪声和Worley噪声
  8. java sin函数图像_java中怎样绘制正弦函数图象
  9. 动易cms5.0如何安装在远程服务器上,动易PowerEasy_SiteWeaver_CMS6.8安装教程
  10. c# 小票打印机打条形码_C# Code 128条形码打印的问题
  11. Windows自带的几种截图快捷键使用方法记录
  12. 如何设置快速启动栏 win7 快速启动栏 快速启动栏不见了.
  13. implode 与 explode 区别
  14. 2018年7月北航举办软件工程师师资培训札记
  15. RTL8723BU wifi 及 热点移植和测试
  16. “跳槽”一词的来历竟然是这样!汗
  17. Shell中的date命令
  18. This beta version of Typora is expired, please download and install a newer version. 解决方案
  19. 祝贺 上海建桥学院,潘笑卓获得2021ACA世界大赛中国赛区季军
  20. ffmpeg 添加-bsf:a aac_adtstoasc 参数的方法

热门文章

  1. Alljoyn之管中窥豹
  2. 深度学习基础--不同网络种类--反馈深度网络(feed-back deep networks, FBDN)
  3. Android 大转盘 好用的示例
  4. Web 性能优化:HTTP
  5. WinForm事件中的Object sender和EventArgs e参数
  6. 卷积神经网络为什么具有平移不变性?
  7. 教你怎样提高记账的效率
  8. 腾讯御安全深度解读影响全球的CPU漏洞:熔断与幽灵
  9. 【C语言】 -- 三子棋(代码+解析)
  10. asm服务网格基本概念-备忘笔记