物理引擎破碎效果的讨论
想请教一下游戏中箱体炸成碎片飞溅的效果,是如何实现的。
愤怒的小鸟使用的Box2D作为它的物理引擎。
玩过愤怒的小鸟的人,可能都知道除了创意外,物理效果是其一大亮点。
小鸟飞出去后,击中玻璃,玻璃会发生破裂效果。
我想知道这个效果是box2d计算出来的,还是在击中后直接播放了玻璃破碎的动画?
我对物理引擎的了解不多,直观的想法是,对游戏中的每一个精灵(可能对应图片或者动画),物理引擎为它建立对应的抽象物理数据,再根据该物体(box2d中好像是刚体,无弹性的)的一些数据变化,算出新的物理数据。然后精灵根据物理引擎计算出的新数据,更新自己的动画,从而实现了物理现象和游戏展现的映射。
不知道这个理解是否确切?
那么,玻璃破碎的效果,或者箱体炸开,木屑飞溅的场景,到底是以什么思路实现的呢?因为如果对整个玻璃映射到物理世界中的某一形状的刚体,那么被小鸟击中玻璃上的某一点,倒是可以在该点计算力,但是,作为一个整体的刚体如何破碎,该用何种办法模拟?然后,最不明白的是,刚体破碎成好多小块的时候,怎么在游戏中展现出来??因为我可能就只有一个整体的刚体的图像,而根据物理引擎计算出来的破碎效果,不可能在游戏中被提前准备好(因为,可能击中不同的位置,造成不同的破碎效果)。
那么,折中的话,就只能播放预先设定好的爆炸动画了,这样也就不会有那么丰富的,逼真的效果了。
但是作为同样使用Box2D的愤怒的小鸟来说,看起来好像是真的计算出来的效果一样,我仔细想了想,感觉可能是碎片是提前做好的,只是碎片的运动方向是实时计算的。
不知道大家的看法怎样? [em20]