开发Stage3D注意事项

发布时间:2015-10-30

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内计算。