Android JBox2d,Box2d,opengl es+算法 粒子系统水流的模拟体会


转载自:http://labs.ywlx.net/?tag=box2d%E6%B0%B4%E6%B5%81%E6%A8%A1%E6%8B%9F

前段时间做小熊蜂蜜,碰到一个做水流的问题,原先我们处理这种情况都是通过在某一位置切图片来实现的,但是在做出来之后发现效果并不是很理想,我们刘大美工拿出了鳄鱼洗澡的游戏进行比较…让我汗颜…可见切图已经无法满足我们的需要了,于是想通过各种方法来模拟一下,看能否实现这种水流效果。 首先我使用的是JBox2d,因为通过理论上来说,我们可以将每一个水流的粒子当做一个刚体,并且给他们重力和不同的力,赋予他们摩擦力,弹性等各种属性之后就可以让框架自己去实现。但是实验结果是…. 在JBox2d当中使用了几百个点之后就跑不动了…都说JBox2d效率差..没想到这么差,这里就不上图… JBox2d搞不定那么就来用一下Box2d试试,这里我使用到了Libgdx框架,Libgdx是开源的android游戏框架,本身功能相当强大。使用了opengl es进行渲染,物理引擎采用了JNI技术封装了Box2d,效率很高,值得我们研究一下。我通过Libgdx封装好的Box2d进行了测试。测试结果如下……. 结果仍然是几百个点到上千个点之后基本就卡的不动了..看起来想要用Box2d省事是不成了.。 最后,通过上网我得到了一种可以解决的,也是大家公认的解决途径 ———粒子系统 通过了解发现了粒子的实现其实就是使用了opengl es进行绘制 和使用强大的算法进行控制。网上有不少关于android粒子系统的粒子。这里是参考别人程序写的分散消失点的小程序,上图: 这是模拟2000个点生成并且消失的一个小测试,在小熊蜂蜜中使用到了一个小型的类似的动画效果。 项目: GLSurfaceView 说明一下,这里是使用了android的GLSurfaceview.GLSurfaceview与Surfaceview的区别是,GLSurfaceview是使用Opengl es进行绘制而Surfaceview是使用Canvas进行绘制。有牛人做过评估,在某些情况下GLSurfaceview的效率是Surfaceview的30倍.至于GLSurfaceview的使用方法基本就是那个套路,有些地方我也不理解是什么意思,就照搬了。打算买一本书看一下: 下面是找到的一个牛人模拟的流体星云的2W个点的粒子系统图: 测试效果是。!几乎感觉不到停顿感! 通过测试、阅读代码和查询资料发现了其实粒子系统的难点就在于算法的实现,想要实现完美的水流模拟,要处理好液体粘度,液体内部碰撞,液体所受到的重力等等非常复杂的算法..没办法,只好一步步的来,相信以后会实现的。!



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告