150 在的颜色值,就好像片段是不透明的那样,这也就是实验中出现的四边形边框无法与背景融 合的原因。本文使用GL_SRC_ALPHA 作为源混合因子,GL_ONE 作为目标混合因子调用 glBlendFunc()函数达到了预期的效果。 155 图3 烟花粒子纹理 图4 心形纹理 Fig. 3 Fireworks particle texture Fig. 4 Heart-shaped texture 3.2 烟花形状上模拟的改进 心形烟花的模拟要实现烟花粒子上升到最高点,爆炸后产生一个“心”的形状。[8]中提 160 到心形形状的控制使用预先准备好的黑白心形纹理图片,背景为黑色,心形形状部分为白色, 通过查询RGB 分量确定需要填充的像素部分,然后在该处填充烟花粒子,从而产生“心” 的形状。这种做法的好处是,形状可变性,通用性好,只要有相关形状的图片,就可以产生 相对应的图案效果。然而这种方法有其自身的缺点,确定烟花的填充位置,需要查询整个屏 幕的RGB 分量,对系统的性能开销很大,达不到实时效果。此外,形状是由固定的烟花粒 165 子填充的,整体上缺乏动态效果。本文从物理的角度,在极坐标系下控制每个粒子的运动属 性,包括每个粒子的速度、方向、加速度等,改进了“心”形烟花的实现过程。烟花粒子爆 炸时,产生的新的大量小粒子具有和爆炸前粒子相同的位置。粒子的速度及方向控制了粒子 运动轨迹,因此爆炸后每个粒子的速度是模拟有形烟花的重要部分。本文使用数学上的阿基 米德螺线函数公式控制烟花粒子的速度和方向,爆炸时的速度为: ⎪⎩ ⎪⎨ ⎧ = − Δ = = − ( ) ( ) ( ) sin * * ( ) cos * * v t v t t v t r v t r z z y x θ θ θ θ 170 (3) 其中θ 为x、y 平面控制一定范围内的弧度值,使得爆炸后的粒子构成一个闭合的区域, r 为随机函数值,用于微调形状,增强真实感。Z 方向的速度不变与爆炸前粒子速度保持一 致。在得到爆炸时粒子的位置和速度后,通过欧拉公式可知粒子的下一帧位置和速度为: ⎪⎩ ⎪⎨ ⎧ + = + Δ + = + Δ + = + Δ s t dt s t v t t s t dt s t v t t s t dt s t v t t z z z y y y x x x ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) (4) ⎪⎩ ⎪⎨ ⎧ + = + = + Δ + = ( ) ( ) ( ) ( ) ( ) ( ) v t dt v t v t dt v t g t v t dt v t z z y y y x x 175 (5) 其中 gy 为y 方向上的重力加速度, Δt 为两帧间的时间间隔。为简化模型的复杂度, 这里假设粒子只受到重力的作用,忽略空气阻力及外力作用。 4 实验结果 分别给出实验中烟花在不同阶段的效果图: 180 图5 上升中的烟花粒子 图6 爆炸初期 图7 爆炸后期 Fig. 5 Increase in the particle fireworks Fig. 6 Pre-explosion Fig. 7 Post-explosion 修改爆炸后烟花拖尾粒子的生命及衰减速度得到的结果: 图8 爆炸初期 图9 爆炸中期 图10 爆炸后期 Fig. 8 Pre-explosion Fig. 9 Mid-explosion Fig. 10 Post-explosion 5 结论 190 本文给出了在物理模型下实现“心”形烟花的燃放模拟方法,改进了以往使用粒子填充 的方式,结合OpenGL 纹理贴图、色彩混合技术增强了烟花模拟的真实感,提高了模拟的实 时性。考虑到系统的完美性,系统的中还可以加入声音,或者烟雾,这将在以后的研究中作 为考虑的方向。 195 [参考文献] (References) [1] Reeves W T.Particle system-A technique for modeling a class of fuzzy objects[J] Computer Graphics 1983,2(2):80-93 [2] 王相海.基于OpenGL 的烟花粒子的模拟[J].计算机应用,2005,25(12):234-259. [3] 万华根.基于物理模型的实时喷泉运动模拟[J].计算机学报,1998,21(9):772-778. 200 [4] Loke T,Tan D,Seah H.Rendering Fireworks Displays[J].IEEE Computer Graphics and Applications,1992,12(3);30-41. [5] 向世名.OpenGL 编程与实例[M]. 北京:电子工业出版社,2000. [6] 丁纪云,陈利平,李思昆.基于OpenGL 的烟花动态模拟方法的研究与实现[J].计算机工程,2002, 20(4):233-250. 205 [7] Dave Shreiner.OpenGL 编程指南[M].李军,徐波.北京:机械工业出版社,2010. [8] 张研研.烟花粒子系统模拟的设计与实现[D].安徽:安徽大学,2010. 学术论文网Tag:计算机论文 代发论文 职称论文发表 |