搁置了半个月的Molehill2D研究重新开始,是因为今天在研究3D的时候发现之前的有一个做法是有问题的。
而明白这个问题之后之前StarM2D效率比位图渲染方式还要低的情况就真相大白了。
context3D.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3);
context3D.setVertexBufferAt(1, vertexBuffer, 3, Context3DVertexBufferFormat.FLOAT_2);
context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, matrix, true);
重点简而言之如下:
之前的做法是每次render都执行一次 vertexBuffer.uploadFromVector(vertices, 0, 4);
vertices是根据坐标进行计算所得,目前看来这种做法的问题就是实际显示的顶点坐标还是由cpu运算所得,所以效率很低。
现在的做法是,vertexBuffer是保存起来的,一般只在第一遍创建之后执行一次 vertexBuffer.uploadFromVector(vertices, 0, 4);
所有的坐标变换都用一个对应的matrix去处理,所以render时只要传入保存下来的vertexBuffer和对应的matrix即可。
看看变态的效率:
25*25 = 625帧动画同时显示
625*2 = 1250个三角形同时显示
帧频稳定的30帧左右
远超之前所做的位图渲染方式的效率
看到这样的效率,继续StarM2D的想法瞬间爆发
接下来就是沿着位图渲染引擎的老路,逐渐把其他一些功能实现
从各方面考量,Molehill2D引擎的开发比Molehill3D引擎的开发简单很多,时间上也会少非常多。
所以六月份先搁置Molehill3D的研究,以实现一个基本功能比较完善的Molehill2D引擎为目标!