最近被安排了做雨雪的效果,由于公司使用的是Away3D引擎,所以只有从这个里面入手了。
雪花效果要求:
1.随便Camera在什么地方都能看到雪;
2.不能只是Camera前面有一层,远处也要有。不然感觉就像是只在窗户外面有一点雪,也就是说粒子动
画的范围要广;
3.性能考虑,不能多余2000个粒子。
解决办法:
后面通过对ParticleAnimator的了解,跟随摄像头可以通过增加ParticleFollowNode和ParticleBillboard
来实现效果。这2个Node基本实现了我要的效果,但是遇到了2个异常现象:
1.在Camera移动过程中,如果粒子Mesh的中点不在Camera视锥里面,整个粒子系统就会消失,经过调
试发现是ParticleMesh的Bounds没有实时更新,因为这个粒子系统的实现是通过AGAL在GPU里面运算实现
动画,内存里面的BOUNDS就没有更新,Camera进行视锥裁剪的时候就会过滤掉。暂时找不到什么好办法,
我就直接particleMesh.id="Particles",然后在MeshNode.as中对这个mesh的id进行判断就不会出现粒子突然
全部消失的现象了。
2.给ParticleBillboardNode传参new Vector3D(0,1,0),粒子系统又消失。这个很费解,通过各种调试查
错都找不到原因,偶然一次注释掉了ParticleBillboardState.as中:
//_matrix.appendRotation(-comps[1].w*MathConsts.RADIANS_TO_DEGREES, comps[1]);
就运行正常了。难道又是Away3D的BUG,这个只有后面慢慢研究什么原因了,会不会有什么不良影响也暂不
清楚。