1.Context3D
必须在入口类内引用Context3D。使用Stage3D,一定要在游戏入口类里加入
import flash.display3D.Context3D;
不引入Context3D的话,编译器会把3D相关的库编译时剔除掉。
2:.AGAL脚本代码
AGAL脚本代码必须修改为GLSL脚本代码,可以使用LayaFlash宏编译标记(详细内容参见《LayaFlash宏编译》教程内容)写在AS3代码内。
类似于如下的代码格式:
//{{ var vertexShader:String = null; var fragmentShader:String = null; /*[IF-FLASH]*/vertexShader=AGAL_ShaderList.shader.QB_NOT_TEX_VS; /*[IF-FLASH]*/fragmentShader = AGAL_ShaderList.shader.QB_NOT_TEX_FS; //[IF-JS]vertexShader=GLSL_ShaderList.shader.QB_NOT_TEX_VS; //[IF-JS]fragmentShader = GLSL_ShaderList.shader.QB_NOT_TEX_FS; //}}
注意,除了修改AGAL外,还必须在AS3代码内使用条件编译,设置GLSL的Shader参数数据,类似于如下的代码:
//设置Vertex Stream. //[IF-JS]loc1=pro.getAttributeLocation("a_position"); //[IF-JS]if(loc1 != null){ //[IF-JS]context.setVertexBufferAt(loc1, mVertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_2); //[IF-JS]} //[IF-JS]loc2=pro.getAttributeLocation("a_color"); //[IF-JS]if(loc2 != null){ //[IF-JS] context.setVertexBufferAt(loc2, mVertexBuffer, VertexData.COLOR_OFFSET, Context3DVertexBufferFormat.FLOAT_4);
3.Stage3D的CullMode与WebGL的CullMode是相反的
如果程序内部有关于context3D.setCulling(Context3DTriangleFace.BACK)类的设置,则必须用LayaFlash宏编译写成Context3DTriangleFace.FRONT,反之亦然。
4.暂不支持纹理压缩功能
如果在Stage3D项目内使用ATF格式的压缩纹理,必须要转回可以跨平台浏览器支持的PNG 、JPG等格式。
5.性能优化方面
不管是AS3还是转换后JS代码,执行效率,都会远远低于显卡的硬件计算。能够放到Shader内计算的矩阵,就一定要到Shader内计算。