[]LayaFlash开发Stage3D需要注意哪些问题?

已邀请:

cuixueying

赞同来自:

使用LayaFlash开发stage3D项目需要注意以下几点:
1.Context3D
  必须在入口类引用Context3D。使用Stage3D,一定要在游戏入口类里添加
import flash.display3D.Context3D;
  不引用Context3D的话,编译器会把你的项目与3D相关的类库在编译成H5时全部剔除掉。
2.AGAL脚本代码
  AGAL脚本代码必须修改为GLSL脚本代码,项目中涉及到AGAL使用的代码部分需要做出以下修改(使用LayaFlash宏编译:http://layaflash.ldc.layabox.com/index.php?m=content&c=index&a=show&catid=6&id=9 辅助)。
注意:链接如不能正常显示,请复制该链接在地址栏粘贴即可。
源代码类似如下代码格式:
//{{
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内计算的矩阵,就一定要到Shander内计算。

要回复问题请先

商务合作
商务合作