AGAL Note 01

花了一个晚上,终于把agal啃下来了,发现一点也不难 =.=
于是尝试的做了几个效果.

先是这个,位图左右缓动
AGAL Code
[cc lang=”actionscript3″ nowrap=”false”]
var vertexShaderAssbler : AGALMiniAssembler = new AGALMiniAssembler();
vertexShaderAssbler.assemble(Context3DProgramType.VERTEX,
“m44 op, va0, vc0n” +
“mov v1, va1n” +
“mov v2, va2n”
);

var fragmentShaderAssbler : AGALMiniAssembler = new AGALMiniAssembler();
fragmentShaderAssbler.assemble(Context3DProgramType.FRAGMENT,
“mov ft5, fc0n” +
“sin ft5.g, ft5.rn” +
“add ft4, ft5.g, v1n” +
“tex ft0, ft4, fs0<2d,repeat,miplinear>n” +
// “mul ft1, v2, ft0n” +
“mov oc, ft0n”
);
[/cc]
Render Code
[cc lang = “actionscript3″ nowrap=”false”]
t += 0.1;
context3D.setTextureAt(0,myTexture);
context3D.setVertexBufferAt(0,vertexBuffer,0,Context3DVertexBufferFormat.FLOAT_3);
context3D.setVertexBufferAt(1,vertexBuffer,3,Context3DVertexBufferFormat.FLOAT_2);
context3D.setVertexBufferAt(2,vertexBuffer,8,Context3DVertexBufferFormat.FLOAT_4);
context3D.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT,0,Vector.([t,0,0,0]));
[/cc]

原理就是从外部发送一个递增的常量,然后在像素渲染程序上对每一个像素进行sin运算,算出一个左右缓动值,然后以该值去取对应点像素,然后输出即可.
效果地址:点我进入

然后复杂一些水波效果
用的水波图是之前flare3d中使用的柏林噪音图

AGAL Code
[cc lang=”actionscript3″ nowrap=”false”]
var fragmentShaderAssbler : AGALMiniAssembler = new AGALMiniAssembler();
fragmentShaderAssbler.assemble(Context3DProgramType.FRAGMENT,
// “mov ft5, fc0n” +
// “sin ft5.g, ft5.rn” +
// “add ft4, ft5.g, v1n” +
// “tex ft0, ft4, fs0<2d,repeat,miplinear>n” +
// “mul ft1, v2, ft0n” +
// “mov oc, ft0n”
//
“mul ft0, v0, fc1.xn”+
“add ft0,ft0,fc1.y n”+
“mul ft1, v0, fc1.xn”+
“add ft1,ft1,fc1.y n”+
“tex ft2, ft0, fs1 <2d,linear,repeat>n”+
“mul ft2, ft2, fc2.xn”+
“sub ft2, ft2, fc2.yn”+

“tex ft3, ft1, fs1 <2d,linear,repeat>n”+
“mul ft3, ft3, fc2.xn”+
“sub ft3, ft3, fc2.yn”+

“add ft4, ft2, ft3n”+
“nrm ft4.xyz, ft4n”+
“mul ft4, ft4, fc1.wn”+
“add ft5, v0,ft4n”+
“tex ft1, ft5, fs0 <2d,linear,repeat>n” +
“mov oc, ft1”
);
[/cc]

效果图

效果地址:点我进入

发表评论

电子邮件地址不会被公开。 必填项已用*标注