版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
天气模拟与喷泉建模实现分析案例目录TOC\o"1-3"\h\u25588天气模拟与喷泉建模实现分析案例 1304971OpenGL技术 1291841.1OpenGL功能 123411.2OpenGL函数库 3321572粒子系统 4161072.1粒子的定义 5311182.2粒子的出生 6322422.3粒子的属性 610342.4粒子的运动状态 7264682.5粒子系统模型 736213基于粒子系统的雨雪天气模拟 8210953.1雨雪粒子属性定义 869763.2雨雪粒子属性初始化 95883.3雨雪粒子的状态更新 10166603.4雨雪粒子融化模拟 12161023.5雨雪粒子的绘制 1254113.5喷泉建模 13268193.5.1水粒子速度初始化 14231793.5.2水粒子碰撞 14123313.5.3水粒子状态更新 1470543.5.4水粒子绘制 1633393.5.5喷泉水型渲染 161OpenGL技术OpenGraphicsLibrary简称OpenGL是一个开发者使用的库,使用此库可以实现复杂的动画渲染。OpenGL提供了对矩阵和向量变化计算的功能,这使得OpenGL可以在三维空间进行模拟,而双缓存技术则提高了OpenGL对模型的渲染速度[44]。同时OpenGL可以通过给模型添加特殊的材质、纹理这样的高级特性,使得模型更真实。在本文中还配置相机功能,这使得镜头可以自由移动,从而对模型进行多角度观察。1.1OpenGL功能OpenGL学习成本不高,但功能却异常强大,目前OpenGL常用的几大功能如下:着色器在OpenGL中,例如水、雪花、火苗的绘制其实是由许许多多的微小动态粒子组成,而对于这些动态粒子,我们需要不断的计算并更新粒子的速度和位置,这时就需要用到着色器。着色器可以理解为是运行在GPU上的一组程序。这些程序段在从几何体到最终图像的三维渲染过程中起着非常重要的作用[45]。着色器提供的对外接口只用于输入和输出。并且,着色器之间相互独立,只能通过这些输入和输出的接口来实现通信。着色器通常由顶点着色器、几何着色器、片段着色器三者构成。首先顶点着色器负责处理位于图元顶部的元素,随后将处理好的元素通过输入接口传入几何着色器,由几何着色器将元素拼组成需要的形状,最后将得到的矢量图形转化为像素点并传给片段着色器,由其来进行测试和混合处理。图3.1三种着色器RGBA模式OpenGL对模型进行颜色绘制时,常用到两种模式,RGBA模式和颜色盘模式。在RGBA模式中,系统通过设置红绿蓝三原色的数值,得到需要的颜色之外,A代表透明度的设置,该模式在绘制自然景物尤其是水滴时,提供了极佳的模拟效果。OpenGL对三维景观的着色问题也提供了两套方案,分别是平面着色和曲面着色[46]。光照设置模拟对象需要根据实际情况,设置不同的光照效果,从而符合场景需求。在OpenGL中包含了四种光线方案可以选择,分别是漫反射光、辐射光、镜面光和环境光[47]。纹理映射三维立体模型设计完成后,需要添加材质或纹理,使得模型观感更真实,同时也能体现模拟对象的细节特征[48]。纹理映射技术通过将材质以贴图的形式赋予三维模型,从而描绘出极具真实性的三维景观。图像增强OpenGL提供了如反走样、雾化、合并的三维效果函数,为景观图像增强模拟效果。在计算机中我们所看到的图像,本质都是由离散的点组合而成,但是这与实际中不符[49]。针对此问题,OpenGL提供了反走样函数,将图像边缘的像素点优化为光滑且连续,使模拟效果更逼真。合并函数的目的是,在描述透明对象时,将目标色与RBG进行颜色融合处理,从而更好的表现目标对象的透明特效。双缓存技术在粒子的渲染过程中,粒子信息需要在CPU和GPU之间来回复制传输,这导致了大量计算资源的浪费。针对此问题,OpenGL提供了双缓存技术,创建了一个名为TransformFeedback的单元作为临时缓存。这样一来,在粒子渲染过程中上一帧的图元信息存放于临时缓存区,用于这一帧的信息计算使用,这一帧的信息更新完成后覆盖上一帧的图元信息,以备下一帧粒子继续使用,以此往复。1.2OpenGL函数库OpenGL中包含的各类函数库实现了其图像处理的功能。这些函数库分别是:核心库、实用库(OpenGLutilitylibarary,GLU)、辅助库(OpenGLauxiliarylibaray,AUX)、工具库(OpenGLutilitytoolkit,GLUT)和Windows平台扩展库等。OpenGL函数库的组成架构如图3.2所示[50]:图3.2OpenGL函数库的组成OpenGL核心库核心库中的函数均以gl为开头,库中包含115个库函数,这些库函数主要负责图形处理等功能。这些函数根据功能可分为:制作简单图元函数、矩阵计算函数、投影转换函数、视口变换函数、光线与贴图函数等。由这些核心库函数衍生的子函数有300个之多。OpenGL实用库实用库的函数前缀为glu,库中包含43个函数,其主要负责OpenGL中点线面的基本几何图元绘制。实用库对部分负责函数进行封装,从而使开发人员通过调用封装类即可快速地进行图形绘制,大大简化了开发难度。实用库中的函数又可以分为:辅助纹理贴图函数、投影转换函数以及工具函数等。OpenGL辅助库辅助库中的函数均以aux为开头,库中包含31个函数,这些库函数主要处理窗口功能、输入输出事件以及基本三维图元模型的绘制。但是AUX与一些平台的兼容性一般,其中尤其是在Windows平台上运行时,时常会出现报错的情况。由于这个问题,OpenGL推出了GLUT库作为代替。OpenGL工具库工具库中的函数均以glut为开头,库中包含30多个函数,由于AUX与一些平台存在不兼容问题,GLUT的主要作用便是取代AUX的功能实现。GLUT库目前在Windows、Linux、OS/2等平台下运行,均表现出强大且稳定的图形绘制能力,使OpenGL成功实现了跨平台开发的技术进步。Windows平台扩展库该扩展库的函数均以wgl开头,库中包含16个函数。该库针对Windows系统平台而开发,更好更稳定地建立了OpenGL和Windows之间的连接。主要解决了OpenGL在Windows系统中无法显示文字的问题。同时添加了一些专用的绘图函数和文本处理函数[51]。2粒子系统1983年Reeves提出了粒子系统,经过几十年的研究发展,至今已成为计算机图形学领域内用于模拟不规则物体使用最多的技术之一。其思想是把不规则的物体看作是由许多粒子组合而成,粒子看作是最简单的元素。在粒子系统中粒子有一系列属性,如速度、颜色、大小、生命周期等。粒子在生成后可以动态改变属性,对粒子进行随机控制,从而可以实现各种各样的细节模拟。粒子系统是一个随机变化的动态系统。粒子系统常用在一些自然现象的模拟实现,例如雪花、水、火焰等。其基本思想是,以许多微小简单的粒子作为基本单位,将这些粒子组合形成不规则的动态物体。对于不同的自然现象,我们需要知道其不同的物理模型,而对不同的物理模型,我们需要根据重力、风力等影响设计粒子特定的运动轨迹、速度以及生命周期[52]。对于每个粒子来说,都会经历生产、运动、消亡的过程,这使得画面不再是传统的静态景观,而是时刻变化的动态模型。实现自然现象的模拟,通常需要非常庞大的粒子数,那么更新每一个粒子的位置、速度、生命周期等属性并同时对每个粒子进行渲染,在CPU上通常是将任务进行序列化处理,但是面对上百万粒子任务时,工作效率将会非常低效。目前比较好的解决方法是将粒子属性的计算过程通过CPU来处理,而粒子的渲染过程则使用GPU来完成,但是这又会导致大量的数据在CPU和GPU之间来回切换,造成资源浪费,降低计算速度[53]。DirectX10引入了一个特殊的缓存机制——TransformFeedback很好的解决了这个问题。TransformFeedback的想法是,创建一个特殊的顶点缓冲区,将上一帧输出的顶点信息作为这一帧的顶点缓存并保存供下一帧渲染处理。顶点缓冲区可以存放粒子每次的计算结果,在下一帧到来时就可以直接从缓存区中读取并处理,如图3.3所示。图3.3TransformFeedback机制2.1粒子的定义粒子系统中,每个粒子有“出生”、“运动”和“消亡”三个阶段,而所有粒子的运动过程就组成了各种各样的动态景物[54]。粒子系统的设计过程中,首先需要根据模拟对象的外形特征,定义每个粒子的外观;随后对粒子的运动属性进行设计,包括粒子的运动变化、运动规律等,再对该属性进行定量描述;最后对粒子进行渲染,生成建模对象[55,56]。其具体步骤如下:根据粒子系统的设置,生成固定数量的粒子。赋予粒子初始属性,包括颜色、速度、大小、材质等。当粒子到达生命周期时,对其进行删除。对粒子的各项属性进行计算并更新。对仍处于生命周期内的所有粒子进行渲染实现。2.2粒子的出生粒子的出生包括粒子的出生空间、出生时间以及出生数量。(1)出生空间无论粒子系统的描述对象形态如何,粒子的出生总是处于某个特点区域内。在确定粒子的出生区域后,需对粒子的初始分布律进行计算。设粒子出生的坐标位置为(a,b,c),则粒子一定满足约束条件f(a,b,c)=0,并且服从概率分布p(a,b,c)=0,通常使用高斯分布和均匀分布方法。(2)出生时间以及出生数量在模拟不规则物体时,粒子系统使用的粒子数越多,则模拟效果越真实,这是因为粒子数反映的是模拟对象的密度属性,而模拟对象的特征则由粒子的出生时间所影响。粒子系统中的粒子分为两类,一类是在模拟的初始阶段便出生的粒子,这类粒子的数量通常较多,其直接影响模拟对象的形态组成;当粒子到达生命周期后,会被粒子系统删除,粒子系统中另一类粒子便是对此进行补充,通常数量较少。2.3粒子的属性每一个粒子都有自己的属性,如颜色、速度、大小等,这些决定了粒子的状态。在不同的粒子系统或者在描述不同的模拟对象时,粒子的属性将完全不同。在本系统中,粒子系统主要应用于模拟水流和天气的实现[57]。用到的粒子属性包括粒子的外形、粒子的空间位置、粒子的速度以及粒子的生命周期。(1)粒子的外形粒子的外形又具体分为粒子的大小、粒子的形状以及粒子的颜色。粒子的大小与最终呈现出的模拟效果息息相关。当粒子尺寸过大时,模拟对象的真实性会降低。粒子除了以点的形状出现外,也可以根据模拟对象的需求,设计为多边形。更可以设计为三维立体,例如在本系统的天气模拟中,将粒子设计为雨滴和雪花两种多面体,可以非常逼真地模拟出雨景和雪景。虽然,粒子外形的设计越复杂,最后呈现的模拟效果也必然越好,但是代价是计算量和渲染时间的增加。(2)粒子的空间位置粒子的空间位置属性分为粒子的坐标和粒子的初始方向。粒子的坐标由以世界坐标为基准的几何坐标(a,b,c)表示。而粒子的初始方向则由向量表示。2.4粒子的运动状态粒子在初始化出生后,按照粒子的初始速度和初始方向开始运动,同时系统对粒子的其他属性也会每帧进行一次计算更新。粒子通过位置、速度、颜色等属性的改变实现在三维空间中的状态变化[58]。粒子的位置变化主要取决于粒子前一帧的位置、粒子的运动速度、粒子的运动方向以及系统每两帧之间的时间间隔。粒子的运动速度的计算主要取决于粒子本身的速度以及粒子所受的外力。在利用粒子系统来模拟的自然景观粒子中,较为常考虑的力有,物体自身的重力、环境的风力、粒子与物体接触后的反弹力等。通过设计函数,每帧对粒子进行一次计算并更新其运动速度和空间位置,可以实现一个粒子的完整运动状态。本系统中只考虑重力的影响,所以水粒子在空中的运动轨迹近似于抛物线,可通过式进行计算: (3-1) (3-2)其中,P表示位置,V表示速度,α表示加速度,粒子的运动状态的变化可根据下式得出: (3-3) (3-4)2.5粒子系统模型考虑现实中的降雪和降雨场景,雨雪飘落的过程中,受到各种力的作用,从而呈现出不规则性,运动轨迹变幻不定,因此十分适合用粒子系统来模拟雨雪的场景动画。每一滴雨滴和每一片雪花可以看作是一个一个的粒子。首先根据雨雪的特征,需要搭建一个粒子系统模拟的过程模型。如第二章中对粒子系统的介绍可知,粒子系统是一个面向对象的系统思想。我们可以把粒子系统看作是一个抽象类,该抽象类中包含了粒子初始化、粒子出生、粒子运动、粒子渲染、粒子死亡等方法的实现。在该抽象类中还设置了私有变量,包括粒子数、粒子的位置、粒子的速度、粒子的颜色等属性的定义。因此对于每一个粒子,我们都需要定义一个数据结构来对其进行完整的描述。图3.4粒子系统模型架构3基于粒子系统的雨雪天气模拟景观设计中,除了需要考虑景物的设计,同样还要考虑天气的变化,景观受天气的影响,呈现的表演效果也各不相同。在本系统中加入了雨景和雪景的模拟,相比于传统的景观设计,本系统加入了天气变化,结合水型表演更易区分不同音乐风格的表现,景观效果也更具实时性和逼真度。3.1雨雪粒子属性定义计算雪花和雨滴的运动过程之前,先要确定粒子的属性。雪花和雨滴在飘落过程中由于受到重力、空气浮力和风力三个力的影响,从而最后在视觉上表现出缓慢飘落的效果。并且不管是雨滴还是雪花,在飘落过程中,自身大小会发生改变,所以其加速度也会发生随机变化。雪花和雨滴在z轴上的坐标位置与其大小属性成正比,从而表现出近大远小的真实观感。当雨滴和雪花下落至地面时,生命周期结束,粒子系统将其删除。雨雪粒子的数据结构设计如下:structParticle{ floattype;//定义是雨滴还是雪花还是水流 glm::vec3position;//位置 glm::vec3velocity;//速度 floatlifetimeMills;//生命周期 floatsize;//粒子点大小};3.2雨雪粒子属性初始化雪花粒子和雨滴粒子共属一个父类抽象类,从父类继承相应属性,随后根据具体模拟情况对相关属性进行初始化设定,并实现父类中所需要的成员方法函数。(1)粒子位置的初始化,首先考虑的是初始高度y,无论雨滴还是雪花,在空中飘落的初始高度都是一个固定值fallHeight。在相应的X-Z平面调用一个随机函数rand使其在边长为areaLength的区域内随机散落。粒子在三轴上的坐标初始化如下所示:record.x=(2.0f*float(rand())/float(RAND_MAX)-1.0f)*areaLength;//X轴record.z=(2.0f*float(rand())/float(RAND_MAX)-1.0f)*areaLength;//Z轴record.y=fallHeight;//Y轴(2)粒子运动速度的初始化。因为雪花和雨滴的大小和其受到的加速有关,当粒子越小则空气浮力作用越明显,向下的加速度越小,当粒子越大则其空气浮力作用越小,向下的加速度越接近重力加速度。所以若假设粒子的下落速度以及其加速度均为恒定值,则无法表现出雨雪散落的真实感和实时性。在本系统中,每个雨雪粒子的初始加速度都附上一个随机函数rand,并且在之后的下落过程中,保持该加速度不变。同时在X-Z平面给所有粒子一个方向为X轴正向的随机初速度来模拟风力对雨雪粒子的影响。虽然在粒子的下落过程中,加速度不再发生改变,但是通过在粒子属性初始化阶段,给予每个粒子不同的初速度和不同的初始加速度,同样能表现出大量雨雪粒子的差异性和随机性。第k个粒子的沿y轴的初始速度分量如下所示:particles[k].velocity.y=(MAX_VELOC-MIN_VELOC)*(float(rand())/float(RAND_MAX))+MIN_VELOC;//在最大最小速度之间随机选择particles[k].velocity.x=WIND_VELOC*(float(rand())/float(RAND_MAX));//风速particles[k].velocity.z=WIND_VELOC*(float(rand())/float(RAND_MAX));//风速这里MAX_VELOC和MIN_VELOC分别为速度初始化的上下域,从而控制粒子下落的初速度快慢。雨滴和雪花除了粒子形状上的差别,在下落的速度上也有明显区别,雨滴的初速度以及纵向的加速度均大于雪花。而WIND_VELOC则是粒子受风力影响获得的一个初速度,乘上一个随机函数,表现出粒子因大小的不同而受到风力产生不同程度的随机变化。粒子在z轴方向上的速度,影响了粒子在z轴上的位置变化,也将导致粒子的大小发生相应的改变,产生近大远小的三维立体效果。在对粒子属性初始化完毕后,粒子便会从指定区域出生。粒子系统不断初始化新粒子直到粒子数达到预设的最大值。根据具体情况来设定粒子数的最大值,粒子数的最大值决定了是大雨还是小雨。3.3雨雪粒子的状态更新在粒子初始化完毕后,粒子系统根据计算公式对粒子进行每帧一次的状态更新,包括粒子的位置属性、速度属性、加速度属性等。本系统对粒子的运动状态做了简化,粒子在整个运动过程中,加速度保持不变,所以在计算公式中,可将加速度属性看作是一个固定值。所以对雨雪粒子的状态更新就等于是对雨雪粒子的位置和速度两项属性的更新[59]。为了方便表示,我们将系统两帧之间的时间差视作最小时间单位,并用表示。则对于每个雨雪粒子的位置及速度属性的数学模型如下所示: (3-4) (3-5)在粒子系统中实现的代码如下:voidUpdateParticles(floatframetimeMills)//粒子的状态更新 { mUpdateShader->use(); mUpdateShader->setFloat("gDeltaTimeMillis",frametimeMills); mUpdateShader->setFloat("gTime",mTimer); //绑定纹理 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_1D,mRandomTexture); glEnable(GL_RASTERIZER_DISCARD);//我们渲染到TransformFeedback缓存中去,并不需要光栅化 glBindVertexArray(mParticleArrays[mCurVBOIndex]); glBindBuffer(GL_ARRAY_BUFFER,mParticleBuffers[mCurVBOIndex]); glBindTransformFeedback(GL_TRANSFORM_FEEDBACK,mTransformFeedbacks[mCurTransformFeedbackIndex]); glEnableVertexAttribArray(0);//类型 glEnableVertexAttribArray(1);//位置 glEnableVertexAttribArray(2);//速度 glEnableVertexAttribArray(3);//生命周期 glEnableVertexAttribArray(4);//大小 glVertexAttribPointer(0,1,GL_FLOAT,GL_FALSE,sizeof(SnowParticle),(void*)offsetof(SnowParticle,type)); glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(SnowParticle),(void*)offsetof(SnowParticle,position)); glVertexAttribPointer(2,3,GL_FLOAT,GL_FALSE,sizeof(SnowParticle),(void*)offsetof(SnowParticle,velocity)); glVertexAttribPointer(3,1,GL_FLOAT,GL_FALSE,sizeof(SnowParticle),(void*)offsetof(SnowParticle,lifetimeMills)); glVertexAttribPointer(4,1,GL_FLOAT,GL_FALSE,sizeof(SnowParticle),(void*)offsetof(SnowParticle,size)); glBeginTransformFeedback(GL_POINTS); if(mFirst) { glDrawArrays(GL_POINTS,0,INIT_PARTICLES); mFirst=false; } else{ glDrawTransformFeedback(GL_POINTS,mTransformFeedbacks[mCurVBOIndex]); } glEndTransformFeedback(); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); glDisableVertexAttribArray(2); glDisableVertexAttribArray(3); glDisableVertexAttribArray(4); glDisable(GL_RASTERIZER_DISCARD); //glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER,0); }3.4雨雪粒子融化模拟文献[35]中对水流模拟首次提出伪粒子粘度算法,用于模拟水滴之间的相互作用力。该算法的核心思想是为粒子在运动过程中添加透明度变化,以及当粒子位置重叠时激活融合函数glBlendFunc模拟水滴之间的半透明效果,从视觉上表现出粒子之间的伪粘度。但是该算法效果一般,并且没有从物理模型上解决粒子之间作用力的根本问题。本文从中受启发,将该算法引入雨雪粒子的融化效果建模,渲染效果提升明显。雨滴和雪花在下落过程通常会渐渐融化。为了增强逼真度,本文在对雨雪粒子进行颜色初始化时采用RGB模式,还加入了一个随生命周期变化的透明度属性,通过辅助属性和RGB三色的共同作用,可以将雨雪粒子模拟出更逼真的渲染效果:glColor4f(0.5,0.5,1,Alpha);首先将RBG三色设置为白色,随后将加入属性,并赋值为1.0,随着水粒子运动,逐渐减小值,直到水粒子生命周期结束,值减小至0。随着值的减小,雨雪粒子的颜色逐渐透明,这样产生的模拟效果如同雨雪粒子在下落过程中逐渐融化。雨雪粒子的颜色初始化赋值公式如下所示:(3-6) (3-7)雪花在添加融化特性前后的效果对比,如图3.5所示:(b)图3.5雪粒子融化特性添加前后3.5雨雪粒子的绘制对于雨雪粒子形状的绘制,若以简单的四边形片呈现,固然是一种简单且方便的方案,但这种绘制方式在多角度观察下,水滴会产生失真或穿帮等问题,例如当观察者的角度正好唯一四边形片的侧面时,水滴将呈一直线的二维形态,这显然与实际不符。OpenGL提供的公告牌技术很好的解决了这个问题,公告牌技术使物体的渲染贴图始终面朝观察者的位置,避免了在动态模拟时因观察角度的变换而发生的穿帮问题。另外,本系统通过OpenGL的纹理映射技术来实现对雨雪粒子的绘制,采用如图3.6所示的纹理图片来代替四边形片。(b)图3.6雨雪粒子纹理图在现实生活中,雨滴下落的速度明显大于雪花,并且雨滴受空气阻力的影响明显小于雪花,这使得雨滴拥有更大向下的加速度。为了模拟出雨滴下落时的速度感和真实感,对雨粒子采用长条状的纹理图进行绘制,更能表现出雨滴下落的快速,更贴近于实际。而雪粒子在下落过程中,受空气阻力作用较明显,向下的加速度较小,在下落过程中,仍保持原本形状。本系统采用六角晶体的纹理对雪粒子进行绘制。从用户的视角,雨粒子和雪粒子得以明显区分,这对水景观通过不同的天气展示区分不同的音乐风格提供了很大帮助。雨雪天气的模拟效果如图3.7所示。(雪)(雨)图3.7雨雪天气模拟效果3.5喷泉建模在上一节中介绍了雨雪粒子的建模实现,主要用于实现天气变化效果。本节同样使用到粒子系统的概念,来对水动画进行建模实现。水粒子与雨雪粒子一样,包含位置属性、速度属性、颜色属性和大小属性。所以水粒子与雨雪粒子共用一个父类Particle,但水粒子的建模有所区别,在本系统中,为了较明显地展示水型动作,水粒子不考虑风力和空气浮力的影响。而水粒子的初速度大小及方向直接决定了最终水型展示的效果。3.5.1水粒子速度初始化水粒子的初始位置决定了水流喷出的喷点,在现实中,有多种喷点形式,有聚焦于一点的,也有排成一直线的,可是无论形式如何,其模拟原理都是相似的,本文以点的喷点形式作为研究对象,并作用于三维立体景物上。水粒子的初始速度包括速度大小和运动方向。水粒子的向上的初速度越大,则水型越高,速度越小,则整体高度越小。从水型的美观性来考虑,对于一个喷水点的水粒子,沿Y轴正向的初速度分量因保持相同,在X-Z平面上设计相应的函数来表演不同的水型动作。3.5.2水粒子碰撞为使水粒子的模拟效果更真实,建模过程中应考虑水滴与地面接触后的反弹效果。水粒子消亡的判断条件应为其速度是否为零,并不单纯由高度决定。水粒子与建筑物接触后会产生动能损失,并获得一个与接触面垂直向上的加速度。设接触面法向量为N_vector,水粒子速度的能量损失系数为loss。水粒子碰撞效果的代码实现为:if(particles[k].position0.y<=0){particles[k].velocity=particles[k].velocity-2*dot(particles[k].velocity,N_vector)*N_vector;//添加反弹力作用的加速度particles[k].velocity*=loss;particles[k].position.y=0;particles[k].lifetime1=particles[k].lifetime0;EmitVertex();//输出该顶点EndPrimitive();}3.5.3水粒子状态更新粒子系统可以很好的对自然景物实现动态模拟,其主要特征是,随着时间的推移粒子属性也在时刻更新。每个粒子都将经历“出生”、“运动”和“灭亡”三个阶段组成的生命周期,当旧粒子被删除时,新的粒子出生补位,不断往复,直到粒子数达到系统所设阈值上限。粒子的数量越多,粒子的大小越小,则更有助于模拟不规则的动态自然景物,并且模拟对象的效果将越逼真。本系统中,水粒子用于模拟水型变化,水粒子通过不断更新位置、速度、透明度等属性值,呈现出动态变化。我们将水粒子的属性分为动态属性和静态属性两种,其中透明度和生命周期视为静态属性,位置和速度视为动态属性。动态属性的更新是水粒子的状态更新问题中的难点,因为各水粒子的初始状态不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026下半年浙江温州瑞安事业单位公开招聘工作人员127人易考易错模拟试题(共500题)试卷后附参考答案
- 员工积极心态职场心态培训模板
- 有滋有味的茶香粗粮豆沙包 教案-2025-2026学年高一上学期劳动技术
- 高中历史 第12课 俄国农奴制改革教学设计1 岳麓版选修1
- 山东省郯城第三中学高一体育 排球比赛规则 四教学设计 新人教版
- 高中语文 第五单元 二 鹏之徙于南冥教案1 新人教版选修《先秦诸子选读》
- 新教材高中生物 第1章 发酵工程 第1节 传统发酵技术的应用教案 新人教版选择性必修3
- 2026下半年广东佛山市农业科学研究所招聘拟聘易考易错模拟试题(共500题)试卷后附参考答案
- 小学语文人教部编版一年级下册10端午粽教学设计
- 三年级品德与社会下册 学看平面图说课稿1 人教新课标版
- 井下中央变电所岗位责任制度
- 呼吸内镜对肺部感染的诊断价值专家讲座
- 绪论材料分析方法哈工大
- 工装管理作业指导书
- 南京开通KT820数控车床说明书
- 口腔修复科患者护理 固定义齿修复基牙牙体预备护理
- 《函数的概念及其表示》第1课时示范课教学课件【高中数学人教A版】
- LY/T 2005-2012国家级森林公园总体规划规范
- JJG 146-2011量块
- GB/T 18926-2008包装容器木构件
- 政治经济学批判导言序言课件
评论
0/150
提交评论