- 浏览: 1091539 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
本帖最后由 sleep2death 于 2011-4-20 16:49 编辑
应7yue大大的要求,贴写小东西.
package shader { import flash.display3D.*; import flash.display3D.textures.*; import flash.geom.Matrix3D; import com.adobe.utils.*; public class AGALHelper { public static var context : Context3D; public static var program : Program3D; public static var vaNames : Vector.<String> = new Vector.<String>(8); // MAX 8 public static var fsNames : Vector.<String> = new Vector.<String>(8); // MAX 8 public static var vcNames : Vector.<String> = new Vector.<String>(128); // MAX 128 public static var fcNames : Vector.<String> = new Vector.<String>(28); // MAX 28 public static var vtNames : Vector.<String> = new Vector.<String>(8); // MAX 8 public static var ftNames : Vector.<String> = new Vector.<String>(8); // MAX 8 public static var vNames : Vector.<String> = new Vector.<String>(8); // MAX 8 public static const FLOAT : uint = 0; public static const FLOAT2 : uint = 1; public static const FLOAT3 : uint = 2; public static const FLOAT4 : uint = 3; public static const VERTEX : uint = 0; public static const FRAMENT : uint = 1; public static function getAttributeIndex(name : String) : int { var insertIndex : int = vaNames.indexOf(name); if(insertIndex < 0) { insertIndex = vaNames.indexOf(null); vaNames[insertIndex] = name; trace("assign " + name + " to va" + insertIndex); } return insertIndex; } public static function setAttribute(name : String, buffer : VertexBuffer3D, offset : uint = 0, format : String = "float4") : void { context.setVertexBufferAt(getAttributeIndex(name), buffer, offset, format); } public static function getVertexConstantIndex(name : String) : int { var insertIndex : int = vcNames.indexOf(name); if(insertIndex < 0) { insertIndex = vcNames.indexOf(null); vcNames[insertIndex] = name; trace("assign " + name + " to vc" + insertIndex); } return insertIndex; } public static function setVertexConstant(name : String, value : *) : void { if(value is Vector.<Number>){ context.setProgramConstantsFromVector(Context3DProgramType.VERTEX, getVertexConstantIndex(name), value); }else if(value is Matrix3D){ context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, getVertexConstantIndex(name), value, true); } } public static function getFragmentConstantIndex(name : String) : int { var insertIndex : int = fcNames.indexOf(name); if(insertIndex < 0) { insertIndex = fcNames.indexOf(null); fcNames[insertIndex] = name; trace("assign " + name + " to fc" + insertIndex); } return insertIndex; } public static function setFragmentConstant(name : String, value : *) : void { if(value is Vector.<Number>){ context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, getVertexConstantIndex(name), value); }else if(value is Matrix3D){ context.setProgramConstantsFromMatrix(Context3DProgramType.FRAGMENT, getVertexConstantIndex(name), value, true); } } public static function getSampleIndex(name : String) : int { var insertIndex : int = fsNames.indexOf(name); if(insertIndex < 0) { insertIndex = fsNames.indexOf(null); fsNames[insertIndex] = name; trace("assign " + name + " to fs" + insertIndex); } return insertIndex; } public static function setSample(name : String, value : Texture) : void { context.setTextureAt(getSampleIndex(name), value); } public static function getIndexByName(vf : String, type : String, name : String) : uint { var first : String = type == "v" ? "v" : vf + type; var names : Vector.<String> = AGALHelper[first + "Names"]; var insertIndex : int = names.indexOf(type + "_" + name); if(insertIndex < 0) { insertIndex = names.indexOf(null); names[insertIndex] = type + "_" + name; trace("assign " + type + "_" + name + " to " + first + insertIndex); } return insertIndex; } public static var v_code : String = new String(); public static function addVertexCode(op_code : String, out : String, in1 : String ,in2 : String = null, extra : String = null) : void { if(op_code == "len"){ ExtraCode_len(out, in1); }else{ v_code += op_code + " " + parseParam(out, "v") + ", " + parseParam(in1, "v"); if(in2 != null) v_code += " " + parseParam(in2, "v"); if(extra != null) v_code +=" " + extra; v_code += " \n"; } } public static var f_code : String = new String(); public static function addFragmentCode(op_code : String, out : String, in1 : String ,in2 : String = null, extra : String = null) : void { f_code += op_code + " " + parseParam(out, "f") + ", " + parseParam(in1, "f"); if(in2 != null) f_code += " " + parseParam(in2, "f"); if(extra != null) f_code +=" " + extra; f_code += " \n"; } private static var v_assembler : AGALMiniAssembler = new AGALMiniAssembler(); private static var f_assembler : AGALMiniAssembler = new AGALMiniAssembler(); public static function uploadCode() : void { v_assembler.assemble(Context3DProgramType.VERTEX, v_code); f_assembler.assemble( Context3DProgramType.FRAGMENT, f_code); if(!program){ program = context.createProgram(); context.setProgram(program); } program.upload(v_assembler.agalcode, f_assembler.agalcode); } public static function printCode() : void { trace("======== VERTEX ========"); trace(v_code); trace("======== FRAGMENT ========"); trace(f_code); } private static function parseParam( code : String, vf : String ) : String { var prop : Array = code.split("."); var prop_str : String; if(prop.length > 1) { code = prop[0]; prop_str = "."+prop[1]; }else{ prop_str = ""; } var codes : Array = code.split("_"); if(codes.length > 1) return (codes[0] == "v" ?"" : vf) + codes[0] + getIndexByName(vf, codes[0], codes[1]) + prop_str; return code + prop_str; } private static function ExtraCode_len(out : String, in1 : String) : void { addVertexCode("dp3", out, in1, in1); addVertexCode("sqr", out, out); } } }
如何使用呢?
先用helper设置一些属性:
AGALHelper.setVertexConstant("c_a1", Vector.<Number>([1.025]));
AGALHelper.setAttribute("a_vb", vertexBuffer));
然后写汇编
AGALHelper.addVertexCode("mov", "t_vb", "a_vb");
AGALHelper.addVertexCode("mov", "t_uvb", "a_uvb");
AGALHelper.addVertexCode("mov", "t_nb", "a_nb");
AGALHelper.addVertexCode("sub", "t_v3Ray", "t_vb", "c_v3CameraPos.xyz");
AGALHelper.addVertexCode("len", "t_fFar.xyz", "t_v3Ray");
AGALHelper.addVertexCode("m44", "op", "t_vb", "c_proj");
AGALHelper.addVertexCode("mov", "v_uvb", "t_uvb");
AGALHelper.addVertexCode("mov", "v_nb", "t_nb");
AGALHelper.addFragmentCode("mov", "t_uvb", "v_uvb");
AGALHelper.addFragmentCode("tex", "t_day", "t_uvb", "s_day", "<2d, clamp, linear>");
AGALHelper.addFragmentCode("mov", "oc", "t_day");
AGALHelper.printCode();
AGALHelper.uploadCode();
好处是你再也不要去记ft0, fc1到底是啥了...另外可以新增一些方法,比如length等等
发表评论
-
AWAY3D 贴图DEMO
2011-05-14 23:16 0AWAY3D 贴图DEMO -
[转] AS3 制作3D位图方法
2011-05-04 00:34 1515http://bbs.9ria.com/viewthread. ... -
和场景里的物体交互要用InteractiveScene3D,examples里有个InteractiveBoxDemo的例子有很好的参考价值
2011-04-28 21:53 0和场景里的物体交互要用InteractiveScene3D,e ... -
[转] 使用Flare3D制作一款 a small game 的3d游戏!
2011-04-25 01:39 2107http://bbs.9ria.com/viewthread. ... -
[转] [Flash/Flex] 支持 Molehill版本的Flare3D 应用示范
2011-04-16 02:30 1268http://bbs.9ria.com/thread-7953 ... -
[转]自制flash3D变换类
2011-04-15 16:09 1026http://hi.baidu.com/boycy/blog/ ... -
[转] [Flash/Flex] native3d flash 3d引擎发布molehill版
2011-04-13 22:46 1116http://bbs.9ria.com/viewth ... -
[转] [Flash/Flex] 轻量级flash3d引擎native3d rev19使用教程
2011-04-10 06:00 1123资讯类型: 原创 来 ... -
[转] 缠绕规则在drawpath中的应用
2011-04-10 05:40 1431使用as3的绘图API绘制填充区域时,经常会涉及到相交区域的颜 ... -
[转]2011RIA天地行主题之3D Flash3D引擎简介
2011-03-31 22:34 1834http://bbs.9ria.com/viewthread. ... -
[转]Flash Player 10' s new 3D effects(三)
2011-03-23 17:34 1620http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(二)
2011-03-23 15:50 1549http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(一)
2011-03-23 14:55 1378http://sjkgxf7191.iteye.com/ ... -
[转]使用Flare3D在FB中搭建第一个Molehill项目
2011-03-22 20:52 1981http://www.adobe.com/cn/devnet/ ... -
[转]M2D的介绍——针对Flash ‘Molehill’ API的GPU加速2D框架
2011-03-22 14:37 1792http://bbs.9ria.com/viewth ... -
[转]使用Away3D引擎的Flash3D推箱子游戏原型 - 最终版本
2011-03-18 22:06 1398http://bbs.9ria.com/viewthread. ... -
3D塔防
2011-03-18 18:29 03D塔防3D塔防 -
[转]Flash ‘Molehill’ API上的GPU加速2D框架-M2D
2011-03-11 02:13 0http://bbs.9ria.com/thread-75 ... -
jiglibflash--Flash 3D physics engine
2011-03-09 13:06 1594http://code.google.com/p/jiglib ... -
[转]使用CS4的新增类实现全景图效果
2011-03-08 15:32 1782http://uh.9ria.com/space-12147- ...
相关推荐
5. **跨平台兼容**:Molehill和Stage3D的设计目标之一就是跨平台兼容,确保在支持Flash Player的不同操作系统和浏览器上都能提供一致的3D体验。 6. **游戏开发**:Molehill的出现极大地推动了Flash平台上的3D游戏...
《Adobe Flash 11 Stage3D (Molehill) Game Programming Beginner's Guide》是一本针对初学者的指南书籍,旨在帮助读者通过ActionScript 3 (AS3) 和 Adobe GPU Accelerated Library (AGAL) 学习如何利用Adobe Flash ...
《源码Adobe Flash 11 Stage3D (Molehill) Game Programming Beginner's Guide》是针对初学者的一本深入解析Adobe Flash 11中的Stage3D(Molehill)技术的游戏编程指南。这本书通过一系列章节的示例代码,旨在帮助...
《Adobe Flash 11 Stage3D (Molehill) Game Programming Beginner's Guide》是一本专为初学者设计的3D游戏编程指南。本书由资深游戏开发者克里斯特·凯蒂拉(Christer Kaitila)编写,他拥有超过17年的专业经验,...
在数字媒体和游戏开发领域,Flash曾经是引领潮流的工具之一,特别是在2D动画和交互式内容制作方面。然而,随着技术的进步,用户对更加立体和真实感的3D体验的需求日益增长。于是,Adobe推出了AS3 Molehill API,为...
综上所述,《Adobe Flash 11 Stage3D (Molehill) Game Programming Beginner's Guide》是一本全面介绍如何使用Adobe Flash 11 和 Stage3D (Molehill) 技术开发3D游戏的入门书籍。它不仅涵盖了必要的理论知识,还提供...
通过Adobe官方提供的编译器AGALMiniAssembler(实际上是一个AS类库),我们可以通过字符串指令来获得一个AGAL二进制流,再通过context3D上传给显卡的编程管线。对于顶点以及片段的运算都是通过AGAL交由显卡来处理的...
5. **渲染上下文**:使用`flash.display3D.Context3D`类建立渲染上下文,这是所有Stage3D操作的基础。 6. **纹理映射**:将2D图像应用到3D对象表面,增加视觉效果。 7. **光照和着色**:学习如何添加光源并应用...
在这个背景下,M2D(Molehill 2D)应运而生,它是一个专门针对Molehill API设计的2D框架,旨在利用现代硬件的优势,提高2D图形的渲染速度。 M2D框架的主要目标是简化开发者的工作,通过提供易于使用的接口来实现GPU...
**标题解析:**“Flash ‘Molehill’ API上的GPU加速2D框架-M2D”指的是一项技术,它利用了Adobe Flash平台中的Molehill API来实现2D图形的GPU加速。M2D(可能是“Molehill 2D”的缩写)引擎是一个专门设计用于提高2...
Molehill API 主要包括 Stage3D API 和 AGAL(Adobe Graphics Assembly Language)。 #### 二、Stage3D API Stage3D API 是 Molehill API 的核心部分,它为开发者提供了一种全新的方式来访问和控制 GPU 的功能。...
在Flash Builder中搭建Molehill的开发测试环境;在Flash Builder中搭建Molehill的开发测试环境
### FlashDevelop + FlashPlayer11(Molehill) + Away3D 4.0 Alpha 配置详解 #### 一、前言 随着3D技术在Web领域的应用日益广泛,Adobe Flash平台也推出了针对3D图形处理的支持。其中,FlashPlayer11通过引入代号为...
Flash Stage3D,又名Molehill,是Adobe引入的一个重要的图形加速技术,它显著提升了Flash在网页上运行3D图形的能力,使得游戏开发者能够创建出更加逼真、流畅的游戏体验。 Stage3D是ActionScript 3.0的一个关键特性...