(计算机应用技术专业论文)基于粒子系统和视频合成的特效系统.pdf_第1页
(计算机应用技术专业论文)基于粒子系统和视频合成的特效系统.pdf_第2页
(计算机应用技术专业论文)基于粒子系统和视频合成的特效系统.pdf_第3页
(计算机应用技术专业论文)基于粒子系统和视频合成的特效系统.pdf_第4页
(计算机应用技术专业论文)基于粒子系统和视频合成的特效系统.pdf_第5页
已阅读5页,还剩46页未读 继续免费阅读

(计算机应用技术专业论文)基于粒子系统和视频合成的特效系统.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学硕上学位论文摘要 摘要 自然景观的模拟在计算机图形学中一直占有一定的重要性,本文的主要研究 内容就是构建模拟自然场景的特效系统,该系统综合运用了两种自然场景模拟技 术:粒子系统和视频的合成技术,这两种技术互为补充,分别构建了系统中的火 焰、烟雾模型和流水的模型。 对于特效场景中的火焰和烟雾模型,由于它们具有不规则的几何形状,细微 的颜色变化,而且受周围环境的影响,很难用视频的合成技术去实现,所以我们 采用了更加适合表现这类物体的粒子系统。粒子系统是一个比较成熟的技术,它 采用大量具有一定生命周期和其他属性的微小粒子作为基本元素来绘制一个或 多个对象,并且可以在实时的情况下保证一定的画面质量。 若采用粒子系统生成流水动画,需要数量巨大的粒子,因而计算量大,且真 实性不够。我们采用了视频纹理合成流水,它具有图像真实的优点,又捕捉了视 频的动态性,又不需要大量的计算。它以样本视频为素材,在对其分析的基础上 构造出连续运动的场景。视频合成最基本要求是保持动态连贯性,利用某种图像 相似度的度量方法来查找视频序列中的周期性,回跳性的循环播放来合成具有任 意长度的视频。 本文研究的重点是构建一种粒子和视频的混合特效系统。详细地介绍了系统 框架、系统主要功能和关键技术,并描述了火焰和烟雾粒子系统模型。在建立了 基本的火焰粒子模型之后,我们又对它们进行了扩展,构建了两种火焰蔓延的模 型和火焰燃烧字符模型。 关键词粒子系统,视频合成,火焰模拟,烟雾模拟,火焰蔓延 浙江大学硕士学位论文 a - b s t r a c t t h en a 七u r a lp h e n o m e n as i m u l a t i o ni sa ni m p o r t a n tr e s e a r c ha r e ao f c 锄p u t e rg r a p h i c s i nt h i sd i s s e r t a t i o nw ec o n s t r u c tah y b r i ds y s t e mf o r s p e c i a le f f e c 七8 i m u l a t i o n t h es y s t e mm a k e su s eo fa d v a n t a g e so fp a r t i c l e s y s t e ma n dv i d e ot e x t u r es y n t h e s i st op r o d u c es p e c i a le f f e c t sr a n g i n gf r o m f i r e 。s l k ea n dw a t e r p a r t i c l es y 8 t e mi sr e g a r d e da so n eo ft h em o s ts u c c e s s f u lt e c h n i q u e t os i m u l a t ei r r e g u l a rf u z z yo b j e c t s 工tu 8 e sal a r g en u m b e ro f8 m a l l p a r t i c l e $ ,w h i c hh a v ec e r t a i nl i f ep e r i o da n do t h e rp r o p e r t i e s ,t or e n d e r o n eo rm o r eo b j e c t 8 ,s u c ha sf l 鲫e , e x p l o s i o n , s m o k e , a sw e l la sg r a s s a n dl e a v e so ft h ep l a n t b e c a u s eo fi t ss m a l l 锄o u n to fc o m p u t a t i o na n d t h ea b i l i t yt og u a r a n t e ei m a g eq u a l i t yd u r i n gt h er e a l t i m er e n d e r i n g , p a r t i c l es y s t 印i sg e n e r a l l yu s e di nt h ea r e a so fg 枷e s ,m o v i e s ,e t c t h i s t e c h n o l o g yi su 8 e d 七os i m u l a t ef i r ea n ds m o k ei no u rs p e c i a le f f e c ts y s t e m ad r a w b a c ka s s o c i a t e dw i t hp a r t i c l e $ y s t e mi st h a tp a r t i c l es y 8 t e mi s n o ts u i t a b l et op r o c l u c ew a t e re f f e c t s ,b e c a u s eh u g ea m o u n to fp a r t i c l e s a r er e q u i r e dt or e p r e s e n tw a t e ri nl a r g ea r e a ,t h u s i n v o l v i n gh e a 、r y c a l c u l a t i o nt op r o d u c ew a t e ra n i m a t i o n v i c l e ot e x t u r ei san e wm e d i a n i n t r o d u c e di nr e c e n ty e a r s ,w h i c hi s8 锄e t h i n gb e t w e e nt h ep h o t oa n dv i d e o t h a tc a p t u r e s d y n a m i c 8o ft h ev i d e oa n dl o o k sr e a l i 8 t i c t o8 y n t h e s i z e av i d e ow i t hv i d e ot e x t u r et h et e m p o r a l c o n t i n u i t ym u s tb em a i n t a i n e d w ec a n8 y n t h e 8 i z eac o n t i n u o u ss t r e a mo fi m a g e sb yr e p e a t i n g1 0 0 p 8d e t e c t e d i nt h eo r i g i n a lv i d e o i nt h i sd i s s e r t a t i o nw ec o n s t r u c ta h y b r i ds y s t 锄u t i l i z i n gb o t h p a r t i c l es y s t e ma n dv i c l e 0t e x t u r es y n t h e s i s w ec k v e 上o p e da8 e to ft o o l s f o rt h eh i g hl e v e lc o n t r o lo fp a r t i c l e sa sw e l la sv i d e ot e x t u r es y n t h e 8 i s r e l e v a n te x a m p l e sa r eg i v e ni nt h ed i s s e r t a t i o nt od e m o n s t r a t et h ep o w e r o fs u c hh y b r i ds y s t 鲫 k e y w o r d sp a r t i c l es y s t e m ,、,i d e os ) ,l l l h e s i s ,f i r es i m l l l a 虹,s m o k es i m u l 鲥o i l ,商r c s p f e a d i l l g 浙江大学硕七论文 图目录 图目录 图l - l 基于跳变( a ) 和渐变( b ) 的视频纹理合成方法 图2 1 系统框架 5 7 图2 - 2 基于m r f 随机场模型的流水视频合成预处理流程图g 图3 1 粒子系统引擎。 图3 - 2 不同纹理生成的不同特质的火焰和烟雾 图3 3 粒子系统控制面板。 图3 - 4 工具栏上用鼠标点击设定火焰和烟雾粒子生成位置的按键 图3 5 鼠标的选取示意图 1 2 1 5 1 6 1 6 图3 - 6 由点p 在窗口中的x y 坐标得到其在三维空间中的世界坐标1 7 图3 7 平截头体,视锥以及视点之间的关系示意图。 图3 8 多种类型的粒子系统在同一场景中分布 图3 9 对多个不同类型的粒子系统的遍历选择及其属性修改 图3 1 0 通过不同角度去观察火焰 图3 1 1 粒子系统属性控制子面板 图3 1 2 粒子数量对粒子的形态作用 1 7 图3 1 3b o x 形状整体控制 图3 1 4 ( a ) 为粒子系统整体分布信息设定; 图3 1 5 不同整体分布形状生成的粒子系统截图。 图3 1 6 不同属性的火焰粒子形态 图3 1 7 子窗口比较 图3 1 8 对z t 。的基于脓f 的插值 图3 1 9 河流中心骨架的设定 图3 - 2 0 两种骨架点设定方法得到的河流截图 图3 2 l 对河流骨架的修改 2 6 2 6 图3 - 2 2 不同角度去观察粒子出现的失真现象 图3 - 2 3 粒子系统的应用截图 图3 - 2 4 特效场景截图 图4 1 燃料粒子系统合成效果图 图4 2 爆炸形成的火墙 图4 - 3f e d k i w 的烟雾截图 图4 4 碰到障碍物的烟雾一 3 1 3 2 3 2 。3 3 图4 5 在封闭环境中的火焰和烟雾 图4 - 6 火焰粒子高宽比变化情况 图4 7 火焰粒子系统截图。 图4 - 8 烟雾粒子运动骨架。 图4 9 烟雾粒子系统截图 图4 1 0 火焰粒子系统自动旋转角度 图4 1 1 火焰蔓延i 过程截图 图4 1 2 火焰蔓延2 过程截图 图4 1 3 系统导入的字符轮廓点 l 3 9 浙江大学硕士论文 图目录 图4 1 4 燃烧字符效果截图。 图4 - 1 5 爆炸粒子模型截图 图4 - 1 6 喷泉粒子运动骨架 图4 - 1 7 喷泉粒子系统截图 图4 - 1 8 喷泉粒子和雨雪粒子模型截图 4 1 4 1 4 2 浙江大学硕士论文 表目录 表3 1 粒子的属性列表 表目录 表3 2 粒子系统的成员属性 v 1 0 1 1 浙江大学硕士论文 第l 章绪论 1 1 引言 第1 章绪论 随着图形学的高速发展,计算机成为在游戏、电影等领域模拟特殊场景的主 要工具。自然景物的模拟则是计算机图形学具有挑战性的研究方向之一。自然景 物的形状往往是不规则的,有些是随机变化的,运用传统的几何学理论很难比较 真实地模拟他们。例如焰火爆炸、云雾闪电、瀑布浪花等动态图像的生成一直是 计算机图形学领域的一个热点和难点,因为这类物体是属于不规则的模糊物体, 其形状、形态随时间的推移而动态地、随机地发生变化,所以很难用常规的建模 方法和模拟技术来生成。目前在这一领域,模拟效果较好的方法应首推f o u r n i e r 的分形算法和r e e v e s 的粒子系统理论。但由于分形算法要进行大量的迭代过程, 计算耗费很大,因此它不宜在对实时性要求很高的虚拟现实系统中采用。而粒子 系统理论则是由w i l l i 硼tr e e v e s 在1 9 8 3 年提出的一种用于模拟不规则的模糊物 体的方法 1 。 粒子系统作为一种很有影响的模拟不规则物体的方法,能够成功地模拟由不 规则模糊物体组成的景物。粒子系统采用了一套完全不同于造型、绘制系统的方 法来构造、绘制景物。景物被定义为由成千上万不规则的、随机分布的粒子组成, 而每个粒子均有一定的生命周期,它们不断改变形状、不断运动,将这些简单形 状的微小粒子作为基本元素聚集起来,形成一个不规则的模糊物体,从而构成一 个封闭的系统,即粒子系统。 若采用粒子系统生成流水动画,需要数量巨大的粒子,因而计算量大,且真 实性不够,所以,人们最近开始研究用视频纹理来模拟流水,合成新的视频序列。 就是一种应用视频重构真实场景的方法。它以样本视频为素材,在对素材视频进 行分析的基础上,构造出永恒、连续的虚拟场景。 下面我们先介绍一下粒予系统和视频纹理的思想。 1 2 粒子系统 早在1 9 8 2 年,w i l l i 硼r e e v e s 就提出了粒子系统( p a r t i c l es y s t e m ) 这个 概念,他的粒子系统( p a r t i c l es y s t e m ) 方法被认为是模拟不规则模糊物体最 为成功的一种图形生成算法,之后很多对于自然景观的模拟都参考了这篇文章 1 。粒子系统能够和其他因素相互作用,易于渲染和进行线性比例变化,合成 浙江大学硕士论文 第l 章绪论 效果真实性主要取决于采用怎样的动态驱动算法。 粒子系统并不是一个简单的静态系统,随着时间的推移,系统中已有粒子不 仅不断改变形状、不断运动,而且不断有新的粒子加入。为模拟生长和死亡过程, 每个粒子均被赋予一定的生命周期,它将经历出生、成长、衰老和死亡的过程。 同时,为使粒子系统所表示的景物具有良好的随机性,与粒子有关的每一个参数 均将受到一个随机过程的控制。除此之外,粒子一般还被赋予了一些属性,包括 速度,大小,形状,运动方向,生命长短等等。这些属性还会随着时间t 的变化 而发生响应的变化。粒子系统的上述造型方式使得用它来模拟动态自然景物( 火 焰、云雾、流水等) 成为可能。 1 2 1 粒子系统的工作原理 粒子系统作为描述不规则形态的方法,其优点在于下面几个方面: 1 ) 对物体的描述不是通过原始的具有边界的面片( 如多边形) 集合来描述, 而是通过一组定义在空间的原始粒子来描述; 2 ) 粒子系统不是一个静态实体,每个粒子的属性均是时间的函数,即每个 属性均会根据时间变化作响应调整; 3 ) 由粒子系统描述的物体不是预先定义好的,其形状和位置等属性均用随 机过程来描述。 一般而言,生成粒子系统某瞬间画面的基本步骤是: 1 ) 分析物体的静态特性,定义粒子的初始属性; 2 ) 分析物体的运动规律,建立粒子属性变化的动态特性; 3 ) 赋予每一新粒子以一定的属性,并将其加入系统中; 4 ) 根据粒子的动态属性对粒子进行移动和变换; 5 ) 删除那些已经超过生命周期的粒子; 6 ) 绘制并显示由有生命的粒子组成的图形。 将步骤3 ) 到6 ) 循环进行,就可以形成物体的不规则动态变化。 一般来言,粒子的初始属性包括其生成的位置、形状、颜色、透明度、大小、 速度、方向、生命周期等,其中粒子的生成位置胁,和粒子系统的位置移s p d f 以及其形态特征有关,而粒子的其他属性一般是由用户自己定义。 在赋给初始属性后,粒子开始进行活动,即随着时间t 的流逝而不断改变它 的各种属性值:第帧时粒子的各属性值为: 谴置p i = p hxy i 1x t ; 速度k = 十ax 厶f : 2 渐江人学硕士论文第1 章绪论 颜色g = g 。一4 f ; 生命l j = l l l 一lt 其中,a 为加速度,厶f 为两帧之间的时间差,厶f 为颜色变化率,4 为生 命变化率。其中透明度的变化包含在颜色的变化中,系统中所用的颜色为r g b a 匹维向量。 当粒子的某个属性在更新之后超出了一定的范畴,就可以判定该粒子死亡, 一般来说都是以生命厶 的最大值巳,然后从五和,盯中随机选择一帧作为要播放的下一帧。在 基于跳变的合成方法中,最关键的一点就是图像相似性评估问题。找到合理的图 像相似性尺度,避免明显的跳变,成为视频纹理合成的最基本的问题。 ( 2 ) 基于渐变的视频纹理合成方法 基于跳变的视频纹理合成方法,是基于图像间相似性进行的。但有时某些场 景的视频纹理合成效果很差,不同帧之问的突然切换带来视觉上明显的不连贯 性。基于渐变的视频纹理合成方法,脱离了基于跳变合成方法的框架,对于可逆 序视频纹理的合成非常有效 1 3 ,1 4 ,即某一段视频无论是顺序播放还是逆序播 放都能正确的反映物体的运动特征时,这样的视频就称为可逆序的。可逆序视频 在现实世界中广泛存在,如周期运动、脸部运动、风中的稻穗的视频等。通过利 用视频的可逆性,可以不断的重复视频中物体运动的特性以达到视频纹理合成的 目的:自然的任意长度的播放效果。视频中可以发生逆序播放的位置称为渐变点, 当视频播放到渐变点时,按照一定的随机概率,选择顺序播放下一帧或者逆序播 放前一帧。如此反复,合成任意长度的视频。找到合适的渐变点成为基于渐变的 视频纹理合成的最关键的问题。 4 浙江大学硕t 论文第1 章绪论 ( a )( b ) 圈1 1 基于跳变( a ) 和渐变( b ) 的视频纹理合成方法 基于渐变的方法增强了视频纹理切换的丰富性,减少了基于跳变的视频纹理 本身所带来的视觉的不连续性,但它只适用于可逆序播放的视频,如:风吹的麦 浪,不断摇动的树木等。而瀑布,流水等视频就不具有这样的特征,瀑布有单一 的向下的运动方向,所以在逆序播放的时候,视频中的物体运动方向完全与实际 相反,对这一类的视频纹理一般只能使用基于跳变的办法来合成。 1 4 本文的主要工作 本文主要的工作就是讲解粒子系统和视频合成的技术结合起来构建的模拟 自然场景的混合特效系统,该系统利用粒子系统的思想实现了对火焰和烟雾的模 拟,并且提供了对火焰和烟雾的多种动态控制功能,包括其生成、撤销的状态控 制功能,也能够实时的更改它们位置、速度和颜色等属性,为了模拟更多的火焰 特效,系统提供了对粒子的整体控制功能,除此以外,系统还可以对粒子添加重 力和风力的作用。我们还利用火焰粒子系统,构建了两种火焰蔓延模型以及一个 燃烧字符模型。对于流水的模拟,我们采取了视频纹理合成的方法,因为视频纹 理不但能够较好的保留流水表面复杂的纹理特性,还可以表现流水的动态特征, 通过视频纹理预处理模块我们可以得到需要的流水纹理序列,然后系统可以利用 路径设定功能和路径编辑功能形成较为理想的河流运动模型。 1 5 本文的结构安排 本文研究的主要内容是基于粒子系统和视频合成的特效系统的构建。 本文共分五章,第一章主要介绍了粒子系统的概念和它作为模拟自然景观技 术的特点,也介绍了粒子系统的主要工作机制,然后对视频纹理及其特点、合成 浙江大学硕士论文 第1 章绪论 方法也作了简单的介绍。 第二章主要描述了一下该综合系统的结构,分别介绍了粒子系统引擎和基于 纹理合成的流水系统的功能框架。 第三章主要是系统的功能介绍和实现方法,描述了粒子系统引擎类中几个关 键类的设计,然后分别介绍了对粒子系统进行控制的面板功能和基于视频的流水 系统的主要功能。该系统向用户提供了对粒子系统位置、状态和属性的多种控制 方式,并且提供了经过预处理形成的视频纹理流水序列的显示路径的设置和编 辑。 第四章主要介绍粒子引擎中的火焰粒子系统和烟雾粒子系统地模型,并且讲 解了对于火焰粒子系统的两种蔓延应用以及利用字符图像轮廓生成的燃烧火焰 特效模型。最后,大致讲解了一下爆炸、喷泉和雨雪粒子系统模型。 第五章是工作展望,提出了若干今后的研究方向。 6 浙江大学硕士论文第2 章系统框架 第2 章系统框架 我们的特效系统主要分为三大功能模块,一部分为系统交互模块,其主要负 责用户和系统其他模块之间的交互;另外两部分通过系统交互模块所传递下来的 信息进行相应的响应,一部分负责粒子系统的生成、变化、撤销和粒子属性的更 改等,这部分为粒子系统的控制模块;另外一部分负责基于对预处理模块形成的 视频纹理的流水的位置、形状及其动态控制,我们称之为基于视频的流水控制模 块。这两个模块在同一个3 d 场景中共同绘制了火焰、烟雾和流水。系统框架图2 1 如下。 围2 1 系统框架 下面我们先对粒子系统的控制模块和基于视频的流水控制模块进行讲解,对 于系统交互模块,我们将在第三章中介绍系统功能的时候相应的进行讲解。 2 1 粒子系统控制模块介绍 我们将系统中粒子系统的控制模块根据其功能分为四个部分: 1 ) 常用功能: 2 ) 粒子系统的基本设置; 3 ) 粒子系统的发射器设置; 7 浙江大学硕i :论文第2 章系统框架 4 ) 环境设置; 常用空能,包括粒子系统的选择,定位和状态控制功能;粒子系统的基本设 置包括系统包括粒子数量的设置,纹理的选择和整体分布形状的选择及其尺寸的 设定。系统的环境设置则包括了风力和重力场设置。我们会在下一章中详细的介 绍这些功能的实现细节。 2 2 视频合成流水系统模块介绍 这一部分主要由两部分组成,一部分是视频合成流水的预处理模块,一部分 就是系统中对其生成的流水纹理序列的路径控制和编辑功能。 下面先介绍一下流水序列的预处理流程。如图2 - 2 所示。 对原始流水视频的合成编辑,由以下几部分组成:由于在原始的视频拍摄过 程中,会存在较大的震动。所以要先对视频的稳定作一定的处理。然后还需要检 测流水序列的周期性,这将保证后面的合成过程中流水的连贯性。我们还需要对 视频纹理进行扩展来达到场景所需要的长度。在视频编辑过程里,改变石头大小 或去除石头。最后将合成后的视频序列运用到特效系统中的3 d 场景里面。 圈2 2 基于m r f 随机场模型的流水视频合成预处理流程田 通过该模块的计算,我们可以得到一个指定长度的流水视频纹理序列。但是 我们还需要在系统的三维场景中将这些视频纹理序列更加生动的边线出来。所以 我们在系统中又提供了对河流路径的 但是以前的系统只能静态的生成河流的河岸,河流的位置和河流的大小,所 以我们的工作主要是在对该系统进行改进,向用户提供了对流水的位置和河流的 边界控制的动态操作。 浙江大学硕士论文第3 章系统功能介绍和实现 第3 章系统功能介绍和实现 这一章我们主要介绍系统中粒子系统的控制模块其结构设计,系统针对粒子 系统提供的主要功能及我们的实现方法,然后我们介绍了视频合成流水模块的预 处理和系统中的对河流路径的设定和编辑功能。 首先我们先来讲解一下粒子系统模块的结构设计,然后我们分别讲解了系统 中的粒子系统控制模块和视频合成控制模块的主要功能和实现方法,最后大概讲 解一下系统显示区域的设定。 3 1 粒子系统模块的结构设计 b u r g 在他的文章 3 中提到,为了更好的建立一个方便控制。并能很好的表 现动态效果的粒子系统,构建一个合理的数据结构是非常必要的,我们要注意到, 如果数据结构构建的不合理则会显著的降低系统的帧数。其中主要耗时的操作集 中在粒子系统引起的内存管理的问题上面。 设计一个粒子系统时,第一要注意的事情是粒子系统会大大的增加了每一帧 的多边形数量。一般来说,每一个粒子需要四个顶点。这样的话,屏幕有2 0 0 0 个可见的雪花的粒子,则要添加2 0 0 0 个可见的四边形,而且当粒子移动的时候, 我们还不能提前计算点缓存,所以点缓存在每一帧都要实时的计算。 所以我们要尽可能少的涉及内存操作( 分配和释放) 。这样,如果一个粒子 经历一定的时期消亡了则不要释放它的内存,相反的是,给它设立一个标识说明 它已经消亡或者正在被重新初始化。这样,当所有的粒子都被标识上“消亡”后, 再一起它们占据的释放内存,这样可以提高内存的访问效率。如果系统是一个持 久的系统则要保持着粒子的“活性”。如果需要重新初始化系统或者增加一些新 的粒子进入系统时,应该自动的根据系统的初始属性重新进行初始化。 然后就要设计一些粒子系统引擎需要的类,下面的图3 1 是该引擎的层次 图。我们可以看到,最上端为粒子系统引擎( p a r t i c l es y s t e me n g i n e ) ,它主要 负责对粒子系统的宏观控制,之后会对它作了比较详细地介绍。第二层为粒子系 统层,包含火焰,烟雾等不同类型的粒子系统,在每个粒子系统中,又包含着第 三层粒子层。用一个从底向上的办法设计这些类,首先我们来介绍粒子层的设计。 9 浙江大学硕士论文第3 章系统功能介绍和实现 3 1 1 粒子层 图3 1 粒子系统引擎 根据第一章1 2 1 小节的介绍,我们应该了解一个粒子必须要有的属性有那 些,不熟悉粒子系统的读者也可以参看j e 仃的文章【4 】,表3 一l 列出了一些常用 的属性。其中,粒子的位置是相对位置,表达了单个粒子相对于它所属的粒子系 统的相对位置,颜色对于表达粒子的材料属性非常重要,而速度( 矢量) 对于表 现粒子的动态特征也不可或缺。 表3 - 1 粒子的属性列表 数据类型名称描述 v e c t o r 3 p n ( x y 母 粒子在它所属粒子系统中的相对位置 s i z e 2 品似j i j ! j 粒子每一帧的尺寸,系统通过该值对粒子进行绘制 c o l o r 4 g 亿g j6 j 砂 粒子的颜色 v e c t o r 3 伽膨砂 粒子的速度,会受到系统加速度的影响 f l o a t 上n粒子的生命周期,当此值消耗为o 的时候,粒子死亡, 作为新的粒子被重新初始化 s i z e 3 4 品加, 。印 粒子每帧尺寸改变量 c o l o r 4 g f j :吕剀 粒子每帧颜色改变量 f l o a t4 k粒子每帧生命改变量,一般为负值 3 1 2 粒子系统层 这个类是系统的核心,因为我们的系统需要定义多种不同类型的粒子系统。 但由于这些粒子系统的很多属性和操作都是类似的,所以我们把它们抽象出来, 并将它们定义为基类p a r t i c l e s y s t e mc l a s s ,该类为系统中其他粒子系统类的 l o 浙江大学硕士论文第3 章系统功能介绍和实现 父类,其他具体类型的粒子系统只需要在继承它的基础上加入自己的动态特征既 可。 作为基类,我们只需要把普遍的属性和操作加入该类就可以了, 表3 2 列出了一些我们在p a r t i c l e s y s t e m 的基础类中需要的属性。 在定义属性的时候,我们要注意到。整个系统的属性会直接影响系统中每个 粒子相对的属性,用户可以根据需要对这些系统属性进行修改,然后各个粒子系 统会根据自己类型的设定对这些系统属性进行适当的修正或者增加随机扰动后 赋予每一个系统中的粒子。注意,根据不同的粒子模型,在初始化的过程中也需 要进行不同的设定,当然,我们也可以在p a r t i c l e s y s t e m 类的继承类中加入新 的属性,来完善其动态特征的构建和控制,比如我们在系统中的烟雾粒子系统中 加入控制烟雾粒子轨迹的属性。 1 成员属性 表3 - 2 粒子系统的成员属性 数据类型名称描述 托x 加增r ( t e x t u r e ) 系统中作用于每一个粒子的纹理贴图 i n ts n ( s y s t e mn u m b e r ) 系统中粒子的数量 p a r t i c l e s p p ( s y s t p o i n t e rt op a r t i c l e s ) 系统中指向粒子的指针 v e c t o r 3 s p ( x 乳笱 ( s y s t e mp o s i t i o n ) 系统的中心位置 v e c t o r 3 s 竹t 卫矽( s y s t v e l o c i t y ) 系统中粒子的速度,系统主要通过宏观控 制该值对每一个粒子的初始速度值进行宏观控制 v e c t o r 3 黝阢舅矽 ( s y s t a c c e l e r a t e ) 发射器对粒子的加速度,作用于每一个 粒子。使粒子在每一帧的速度发生变化 s i z e 2 s p s ( w m( s y s t 鲫p a r t i c l es i z e ) 系统定义的其中各个粒子的尺寸,便 于宏观控制。 c o l o r 4 s c ( r g , ( s y s t e mc o l o r ) 系统的整体颜色,l 可样的,也是便于宏观的控 6 ,脚制系统粒子的初始颜色 c o l o r 4 s f c f r 备b ( s y s t f a d ec o l o r ) 系统作用于每个粒子的消退颜色,使粒子 神在每一帧的颜色发生变化 v e c t o r 3 艘阮舅砂 ( s y s t e mr o t a t e ) 用来控制系统对x ,y ,z 轴的旋转角度 f l o a t s s c o l e ( s y s t 明s c a l e ) 用来整体的放大和缩小粒子系统 f 1 0 8 t观 ( s y s t l i f e ) 系统中每个粒子的生命的初始设置 i n ts s t ( s y s t e ms o u r c et y p e ) 系统粒子整体分布形状类型 s i z e 3 s s s ( w ,h d )( s y s t s o u r c es i z e ) 系统整体分布形状的尺寸 新江大学硕士论文第3 章系统功能介绍和实现 粒子系统的纹理作用于系统中的每一个粒子,纹理的选取直接影响到系统所 表现的物体的性质特征,纹理映射是增强真实感的简单有效的手段。粒子是用有 大小、形状和颜色的几何图元来表示的,我们的系统采用了矩形图元,因为这种 形状较之其他几何形状,计算量较小,特别是在粒子数量众多的情况下,为保证 实时性,采用矩形图元更显适当。矩形的长和宽都可以由用户根据自己的要求来 设定。为每个粒子贴上纹理图,加上颜色的混色处理,就可以生成用户需要的粒 子系统模型了。不同的纹理图案可以产生不同效果,比如图3 2 ( a ) 中的火焰图 案和图3 2 ( b ) 中的火焰图案,图3 2 ( c ) 中的烟雾和图3 2 ( d ) 中的烟雾都因为粒 子纹理选择的不同而有不同的效果。 田3 - 2 不同纹理生成的不同特质的火焰和烟雾 粒子系统的c p a n i c l e 类型的指针,p 是指向该系统中粒子对象的,在 p a r t i c l e s y s t e m 类型的对象初始化的时候,需要分配繇,个p a n i c l e 对象大小的空 间。 2 ,成员函数 在基类p a r t i c l e s y s t e m 中,还必须含有一些成员函数,其中的一些用来设 置粒子系统中粒子的属性,其他一些负责控制粒子的产生、更新和绘制。对于设 1 2 浙江大学硕上论文 第3 章系统功能介绍和实现 定粒子属性的函数,又分为两种,一种是设定系统属性的函数,一种是根据设定 好的系统属性去分别设定粒子个人属性的函数。因为在第三第四章介绍火焰和烟 雾粒子系统的时候会用到很多的成员函数,我们在这里解释一下我们系统中对重 要函数的命名规则,对于设置系统的变量属性的操作,我们一般用 s e t s y s t e m 胞册( t y p ev a l u e l ,t y p ev a l u e 2 ,) 的命名方式,其中a 册表示我们 需要设置的系统属性,括号中的t y p ev a l u e i 代表想要设置的值,比如 s e t s y s t e l i l l i f e ( 1 0 ) 就是设置系统中每个粒子的初始生命为1 o 。这种对于系统 属性的操作,一般是向用户开放的,这样,用户就可以通过晃面上相应的功能, 对粒子系统的系统属性进行修改。而对于设置系统中某个粒子的个人属性,我们 也需要专门的函数,其命名规则如下,s e t 牖册( i n t t y p ev a l u e l ,t y p e v a l u e 2 ,) 。如上,胞册代表需要设置的粒子的属性名称,括号中的第一个参 数代表需要设置的粒子序列号,比如s e t c 0 1 0 r ( 1 2 ,c o l o r 3 ( 1 ,0 ,o ) ) 就是设置 序列号为1 2 的粒子其颜色为红色。对于粒子个人属性的设置操作,都没有向用 户开放,因为通常用户都不会专门对某一个粒子进行操作的。系统会根据初始化 的或者用户设定好的系统属性值,再对系统中的各个粒子进行粒子属性的操作。 这种命名模式的成员函数过多,就不再一一介绍。 在基类中,我们设置了三个虚函数,分别为: 1 ) v i r t u a li n tr e s e t p a r t i c l e s ( ) : 其作用是重置系统中的所有粒子;因为每一个系统的中的重置都会有所 不同,所以令其为虚函数; 2 ) v i r t u a li n tp a r t i c l e r e b i r t h ( i n tn ) ; 当某一个粒子( 序列号为n ) 死亡后,则会对他进行重新的初始化,对于粒 子属性的初始化,关系到该系统的动态特征,对于不同的粒子系统,肯 定会有所区别,所以也将其设置为虚函数; 3 ) v i r t u a li n td r a 霄( ) : 对于不同类型的粒子系统,在绘制方法上也会有所区别,这是它为虚函 数的主要原因。 另外,因为粒子系统的动态特点,其活动粒子在每一帧的下列属性可能会发 生变化:粒子位置r ,粒子大小品,粒子颜色c 刍,粒子速度,粒子生命周 期厶。所以我们要有一个更新函数负责此功能的实现,在此引入更新函数 u p d a t e p a r t i c l e ( i n tn ) ,其中参数n 代表需要更新的粒子序列号。其函数伪代 码如下: u p d a t e p a r t i c l e ( i n ti ) i 代表需要更新的粒子序列号 p i ( x 。转z ) + = s i ( x y 矽: 疆 ! 颓位置 s 缸,mz l + = s s ( x 弘z ) ;f 嗄蕊逸霞 厶良卫矽+ = 4 厶;更新生命周期 c j f :吕矽+ = 4c f f j :g 缈;,更新粒子颜色 浙江大学硕士论文第3 章系统功能介绍和实现 s 。( 霄,h ,d ) + = 厶s 觚危矽;更新粒子尺寸 3 1 3 粒子系统引擎层 该类是该模块最上层的类,主要负责的工作是对整个系统宏观的控制。它负 责根据系统交互模块中的相应操作,对其下的多个或某一个粒子系统对象进行更 改。 该类的主要功能包括对粒子系统的管理,包括动态的添加需要的粒子系统, 控制这些粒子系统的生成位置,对他们的系统属性进行更改等。 粒子引擎含有不同类型的粒子系统,对于不同类型的粒子系统对象,我们将 其存储在s t l 自带的v e c t o r 容器当中,之所以选择v e c t o r 而不选择1 i s t 作为 粒子对象的存储方式,是因为系统的操作会涉及至q 很多的对不回粒子系统的随机 选择。比如,我们将火焰粒子系统的类定义为f i r e p a r t i c l e s y s t e m ,该类是 p a r t i c l e s y s t e m 类的继承,然后我们就定义v e c t o r m - f i r e p a r t i c l e s y s t e m 为一个粒子引擎的成员变量。对于第i 个火焰粒子系统, 他的操作就是对虬f i r e p a r t i c l e s y s t e m i 的操作,如果换成l i s t ,则会花很多 时间在遍历上面。 3 2 粒子控制模块功能和实现方法 下图3 3 就是负责粒子控制模块工作的控制面板截图,主要分为两个部分, 上面三组功能为常用功能。包括粒子系统的选择,定位和状态控制,下面为粒子 细节控制单元。 1 4 浙江大学硕士论文 第3 章系统功能介绍和实现 图粒子系统控制面板 我们按照由上到下分别对各个功能进行讲解,由于粒子系统得选择功能会和 粒子系统的生成和添加功能有关,我们会在控制粒子系统状态这一小节中提到。 3 2 1 粒子系统位置的设定 首先,我们先来看粒子系统的位置选择,对于粒子系统的位置s p 的确定,我 们的系统提供了两种方法,对于大部分类型粒子系统,通常都只有第一种方式, 即通过控制面板上位置设定来完成,第二种则是图3 _ 4 中所示的,仅仅对火焰和 烟雾粒子系统有效果,通过这两个工具栏上的按键,我们可以通过鼠标直接在三 浙江人学硕t 论文第3 章系统功能介绍和实现 维场景的平面上对粒子系统的生成位置进行设定。 图工具栏上用鼠标点击设定火焰和烟雾粒子生成位置的按键 下面我们需要先对系统采用的鼠标选取粒子系统生成位置的方法进行讲解。 我们需要用户可以在场景的“地面”上的任意位置点击生成粒子系统,但是 如果选择0 p e n g l 自带的选择和反馈机制,却很难满足这个要求。 用过0 p e n g l 选择与反馈机制的开发者,会发现它只能做基于图元的选定。 如下图3 5 ,使用g l _ t r i a n g l e s 绘制一个三角形,三个顶点分别为p 1 、p 2 和p 3 。若使用该机制,你将只能判断是否在三维场景中选中了这个三角形( 用 户点击处是否在p 1 、p 2 和p 3 的范围内) ,而无法判断用户是点击了这个三角形 具体哪一部分( 是左边的m 区域内还是右边的n 区域内) ,因为所绘制的p l 、p 2 和p 3 本身构成的三角形就是一个基本图元,对于拣选机制而言是不可分的。当 然,把这个三角形拆成两个三角形再分别进行测试也是一个可行的方案,可是看 看图2 4 ( b ) 和2 4 ( c ) ,都会发现对于拆分的实现会非常的困难,另外,如果n 和m 两个平面不共面,也很难的去实现拆分。对于使用者而言,0 p e n g l 提供的 拣选机制功能在这样的问题上会显得十分有限。 ( b )( c ) 图3 - 5 鼠标的选取示意图 p s 扎 实际上我们可以利用很普通也很有用的g l u 函数g l u u n p r o j e c t ( ) 。此函数 的具体用途是将一个o p e n g l 视区内的二维点转换为与其对应的场景中的三维坐 标。转换过程如图3 6 所示: 1 6 浙江大学硕士论文第3 章系统功能介绍和实现 to 世界坐标 9 “乡 o 丫 l 一 ,。 i 一 _ _ 圈3 弗由点p 在窗口中的x y 坐标得到其在三维空间中的世界坐标 x 众所周知,我们通过一个放置在三维世界中的摄像机,来观察当前场景中的 对象。通过使用诸如9 1 u p e r s p e c t i v e ( ) 这样的o p e n g l 函数,我们可以设置这 个摄像机所能看到的视野的大小范围。这个视野的边界所围成的几何体是一个标 准的平截头体( f r u s t u m ) ,可以看作是金字塔状的几何体削去金字塔的上半部分 后形成的一个台状物,如果还原成金字塔状,就得到了通常我们所说的视锥( v i 鲫 f r u s t 唧) 这个视锥的锥顶就是视点( v i e wp o i n t ) 也就是摄像机所在的位置。 平截头体,视锥以及视点之间的关系,如图3 7 所示: d ( a )( b ) 田3 - 7 平截头体,视锥以及视点之间的关系示意团 在上面的图中,远裁剪面a b c d 和近裁剪面a b c d 构成了平截头体, 加上虚线部分就是视锥,顶点o 就是摄像机所在的视点。我们在窗口中所能看到 的物体,全部都在此平截头体内。这跟前面的窗口坐标z 值有什么关系昵? 如( b 图所示,点p 和点p 分别在远裁剪面a b c d 和近裁剪面a b c d 上。我们 点击屏幕上的点p ,反映到视锥中,就是选中了所有的从点p 到点p 的点。对 应这里的情况,用户单击鼠标获得屏幕上的某一点,即是指定了从视点指向屏幕 深处的某一方向,也就确定了屏幕上某条从0 点出发的射线( 在图中即为o p ) 。 在这里,我们称呼其为拣选射线。 因此,从窗口的x y 坐标,我们仅仅只能获得一条出发自0 点的拣选射线, 1 7 浙江大学硕士论文 第3 章系统功能介绍和实现 并不能得到用户想要的点在这条射线上的确切位置。 这时候窗口坐标的z 值就能派上用场了。我们通过z 值,来指定我们想要的 点在射线上的位置。假如用户点击了屏幕上的点( 1 0 0 ,1 0 0 ) 得到了这条射线o p , 那么我们传入值1 o f 就表示近裁剪面上的p 点,而值o o f 则对应远裁剪面上的 p 点。 这样,我们通过引入一个窗口坐标的z 值,就能指定视锥内任意点的三维坐 标。与此同时,我们还解决了 1 6 的方法中存在的缺陷同一位置上重叠物体 的选择问题。解决办法是:从屏幕坐标得到射线之后,分别让重叠的物体与该射 线求交,得到的交点,然后根据这些与视点的远近确定选择的对象。如此我们就 不必受“仅仅只能选取屏幕中离观察者最近的物体”的限制了。这样一来,如果 需要的话,我们甚至可以用代码来做一定的限定,通过判断交点与视点的距离, 使得与该拣选射线相交的物体中,离视点远的对象才能被选取,这样就能够对那 些暂时被其他对象遮住的物体进行选取。 至于如何求拣选射线与对象的交点,在我们的系统中,我们用该鼠标拾取的 算法实现了鼠标选择点击场景平面来生成点。我们只需要求出鼠标在世界空间中 生成的“射线”与我们系统中默认的点平面为x o z 平面的交点即可,该点就是 鼠标在此平面上选取的点。 3 2 2 粒子系统的状态控制 系统提供了对粒子系统的状态控制主要有以下几类: 1 )粒子系统的生成、添加和撤销; 2 )多个粒子系统的顺序选择; 3 )当前粒子系统运动状态的停止和继续; 如下图3 8 所示,系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论