软件工程毕业设计(论文)-用Perlin噪声模拟群组动画.doc_第1页
软件工程毕业设计(论文)-用Perlin噪声模拟群组动画.doc_第2页
软件工程毕业设计(论文)-用Perlin噪声模拟群组动画.doc_第3页
软件工程毕业设计(论文)-用Perlin噪声模拟群组动画.doc_第4页
软件工程毕业设计(论文)-用Perlin噪声模拟群组动画.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计(论文)说明书学 院 软件学院 专 业 软件工程 年 级 2007 姓 名 指导教师 2011年 3月 6 日毕业设计(论文)任务书题目:用perlin噪声模拟群组动画学生姓名 学院名称 软件学院 专 业 软件工程 学 号 指导教师 职 称 讲师 一、原始依据(包括设计或论文的工作基础、研究条件、应用环境、工作目的等。)1.工作基础群组动画是研究和模拟由简单个体组成的群组与环境之间以及群组个体之间的互动行为。关于群组动画的研究,reynold等人在1987年提出了基本的群聚算法,kennedy等人在1994年提出基于生命模型的动画自动生成方法,tuxing在1995年提出一种基于群组的演化算法。目前使用人工智能算法来制作群组动画较为普遍。 目前的文献中大多采用两类方法来制作群组动画,一是利用人工智能算法(基于节点控制),这类算法的主要优点是容易实现个体的复杂行为,缺点是实现较为繁琐,运行效率低;二是利用粒子系统(基于图像或动作序列)控制个体行为,优点是易于实现,可行性较高,对细节要求不高的单体行为可以很好地完成,缺点是行为具有单一性。我想研究的就是在第二类方法的基础上,提出了一种基于perlin噪声的实时群组动画算法。通过简单的函数表达式控制对单体行为进行干预,从而达到逼真的三维群组动画效果。2. 研究条件 宿舍的电脑;互联网;指导老师的帮助3. 应用环境 windows 7 操作系统;visual studio 2005;互联网4. 工作目的 研究目标是以昆虫群组动画为例,在粒子系统上采用perlin噪声作为函数来“干预”个体行为,实现一类个体行为较简单的群组动画算法。另外,在电影、游戏中,经常出现大批昆虫飞舞的场景,如何高效且真实地渲染此类场景也是本文的主要研究目的。 二、参考文献1 kei senda, masakazu sawamoto, takanori shibahara, masahiko kitamura, tsuyoshi tanaka, “study on flapping-of-wings flight of butterfly with numerical and experimental analysis,” atmospheric flight mechanics conference and exhibit 21 - 24 august 2006, keystone, colorado2 jia-chi wu, zoran popovic, “realistic modeling of bird flight animations,” acm transactions on graphics (tog), volume 22, issue 3 (july 2003)3 senda, k., tanaka, t., and sawamoto, m., “measurement and numerical simulation of a flapping butterfly,” proceedings of 2nd international symposium on adaptive motion of animals and machines, kyoto, 2003, pp. 117, wep-ii-1.4 katz, j. and plotkin, a., low-speed aerodynamics, cambridge university press, cambridge, 2nd ed., 2001.5 abbott, m. b., and basco, d. r. 1990. computational fluid dynamics: an introduction for engineers. longman science & technology. isbn 05820136586 am berg, aa biewener, “kinematics and power requirements of ascending and descending flight in the pigeon (columba livia),” journal of experimental biology, 20087 mh dickinson, fo lehmann, sp sane, “wing rotation and the aerodynamic basis of insect flight,” science, 1999三、设计(研究)内容和要求(包括设计或研究内容、主要指标与技术参数,并根据课题性质对学生提出具体要求。) 1.研究内容 本论文对基于perlin噪声的群组动画模拟展开研究,将perlin噪声函数运用到群组动画中是主攻方向。研究内容包括:本领域的研究背景和现状;数学理论基础和建模;详细的设计与编码。 2.主要指标与技术参数 perlin噪声函数; simplex噪声; opengl; 指导教师(签字)年 月 日审题小组组长(签字)年 月 日天津大学本科生毕业设计(论文)开题报告课题名称用perlin噪声模拟群组动画学院名称软件学院专业名称软件工程学生姓名指导教师陈锦言(内容包括:课题的来源及意义,国内外发展状况,本课题的研究目标、研究内容、研究方法、研究手段和进度安排,实验方案的可行性分析和已具备的实验条件以及主要参考文献等。)1、 课题的来源及意义 因为对模拟动画比较感兴趣,相关资料比较充足,固选择此题目。群组动画是研究和模拟由简单个体组成的群组与环境之间以及群组个体之间的互动行为。现在通常使用人工智能算法制作的群组动画,其个体行为的自由度是其他方法不能比拟的。但是由于其实现过程过于复杂,所以我这次研究的工作目的是以昆虫群组动画为例,在粒子系统上采用perlin噪声作为函数来“干预”个体行为,实现一类个体行为较简单的群组动画算法。2、 国内外发展状况 关于群组动画的研究,reynold等人在1987年提出了基本的群聚算法,kennedy等人在1994年提出基于生命模型的动画自动生成方法,tuxing在1995年提出一种基于群组的演化算法。目前使用人工智能算法来制作群组动画较为普遍。3、 研究目标 研究目标是以昆虫群组动画为例,在粒子系统上采用perlin噪声作为函数来“干预”个体行为,实现一类个体行为较简单的群组动画算法。另外,在电影、游戏中,经常出现大批昆虫飞舞的场景,如何高效且真实地渲染此类场景也是本文的主要研究目的。4、 研究内容 本论文对基于perlin噪声的群组动画模拟展开研究,将perlin噪声函数运用到群组动画中是主攻方向。研究内容包括:本领域的研究背景和现状;数学理论基础和建模;详细的设计与编码。5、 研究方法和手段 昆虫飞舞的方式虽然杂乱无章,但在空间中式均匀的,不会出现过度密集或过度分散的情况,而perlin噪声函数恰好可以模拟这类杂乱而又有规律的现象。因此设计一种粒子模型,使用perlin噪声函数求出粒子的速度。6、 进度安排2010.12.202011.03.10 查阅资料完成任务书 ,完成开题报告2011.03.112011.03.12 开题报告会2011.03.132011.04.24 查阅资料,进行论文基本章节的写作,完成初稿,并完成进行代码编写2011.04.252011.04.30 毕业设计中期报告会2011.05.012011.05.22 系统设计结束并再次检查系统的可靠性,进行仿真。2011.05.232011.06.22 完成论文及答辩7、 可行性分析 目前的文献中大多采用两类方法来制作群组动画,一是利用人工智能算法(基于节点控制),这类算法的主要优点是容易实现个体的复杂行为,缺点是实现较为繁琐,运行效率低;二是利用粒子系统(基于图像或动作序列)控制个体行为,优点是易于实现,可行性较高,对细节要求不高的单体行为可以很好地完成,缺点是行为具有单一性。 我想研究的就是在第二类方法的基础上,提出了一种基于perlin噪声的实时群组动画算法。通过简单的函数表达式控制对单体行为进行干预,从而达到逼真的三维群组动画效果。相对于人工智能算法来说可行性较高。8、 实验条件 windows 7 操作系统;visual studio 2005;互联网9、 主要参考文献1 kei senda, masakazu sawamoto, takanori shibahara, masahiko kitamura, tsuyoshi tanaka, “study on flapping-of-wings flight of butterfly with numerical and experimental analysis,” atmospheric flight mechanics conference and exhibit 21 - 24 august 2006, keystone, colorado2 jia-chi wu, zoran popovic, “realistic modeling of bird flight animations,” acm transactions on graphics (tog), volume 22, issue 3 (july 2003)3 senda, k., tanaka, t., and sawamoto, m., “measurement and numerical simulation of a flapping butterfly,” proceedings of 2nd international symposium on adaptive motion of animals and machines, kyoto, 2003, pp. 117, wep-ii-1.4 katz, j. and plotkin, a., low-speed aerodynamics, cambridge university press, cambridge, 2nd ed., 2001.5 abbott, m. b., and basco, d. r. 1990. computational fluid dynamics: an introduction for engineers. longman science & technology. isbn 05820136586 am berg, aa biewener, “kinematics and power requirements of ascending and descending flight in the pigeon (columba livia),” journal of experimental biology, 20087 mh dickinson, fo lehmann, sp sane, “wing rotation and the aerodynamic basis of insect flight,” science, 1999选题是否合适: 是 否课题能否实现: 能 不能指导教师(签字)年 月 日选题是否合适: 是 否课题能否实现: 能 不能审题小组组长(签字)年 月 日摘 要群组动画是一种广泛应用于电影特效和游戏中的动画技术。伴随着影视和游戏制作软硬件技术的不断发展,群组动画作为一个新兴的技术领域,越来越多的被人们所关注,这种技术可以模拟众多角色的运动,大场面的表现越来越真实,同时成本下降很多。群组动画一直是三维动画的一个难点。目前的文献中大多采用两类方法来制作三群群组动画,一是利用人工智能算法(基于节点控制),这类算法的主要优点是容易实现个体的复杂行为,缺点是实现较为繁琐,运行效率低;二是利用粒子系统(基于图像或动作序列)控制个体行为,优点是易于实现,对细节要求不高的单体行为可以很好地完成,缺点是行为具有单一性。通过对第二类方法的改进,在系统中加入表达式控制,使其富有变化,形成各种生动的行为,甚至按设计者的意愿行动,这种改进很好地弥补了原始方法的不足。本文就是在第二类方法的基础上,提出了一种基于perlin噪声的实时群组动画算法。通过简单的函数表达式控制对单体行为进行干预,从而达到逼真的三维群组动画效果。论文中进行了可行性分析并加以实现。该算法的核心思想是:根据群组动画的特点设计一种粒子模型,使用perlin 噪声来生成速度域,利用该速度域求出粒子(个体)的速度。关键词:perlin噪声;群组动画;实时渲染abstractcrowd simulation is widely used in film special effects and game animation. as the development of video and games production of software and hardware technology, crowd simulation technology is a new field that more and more people are concerned in. this technology can simulate the movement of many roles. the performance of large scenes is more and more real, while the cost becomes cheaper.crowd simulation has always been a difficult three-dimensional simulation. most of the current literatures provide two kind of methods used to create three-dimensional crowd simulation. one method is to use artificial intelligence algorithms (based on the node control). the main advantages of these algorithms are that theyre easy to carry out the complexity of individual behavior, while the disadvantage is that theyre more complicated to achieve, and the inefficiency. the other method is to use particle system (based on the image or action sequences) to control the individual actions, the advantages are easy implementation, and the individual behavior with low quality can be handled well. while the disadvantage is that behavior is dull.by improving the method ii, we can add expression controls in the system to make the behaviors full of changes. even actions can in accordance with the wishes of designer. this improvement fill up the inadequate points of the original method.the method ii is based on an algorithm which uses perlin noise to create real-time crowd simulation. by adding simple function expressions to control intervention on the individual behaviors, thus carrying out realistic special efforts. my bachelors degree thesis carries out a feasibility analysis and an accomplishment.the key idea of the algorithm is: according to the feature of crowd simulation to create a particle model, using the perlin noise to generate the velocity field, then using this velocity field to calculate the particle (individual) speed.key words: perlin noise;crowd simulation;real-time rendering目录(三号、黑体、居中、目录两字空两格、与正文空一行)第一章(空两格)(小三号、宋体)1.1(空一格、四号宋体)1.21.3第四章(空两格)(小三号、宋体)4.14.2参考文献(小三号、宋体)附录(小三号、宋体)外文资料(小三号、宋体)中文译文(小三号、宋体)致谢(小三号、宋体)目录单独排页码, 阿拉伯数字(宋体小五号)连续编排,居中书写。 2天津大学2007届本科生毕业设计(论文)第一章 绪论1.1 研究背景1.1.1 群组动画的定义群组动画是研究和模拟由简单个体组成的群组与环境之间以及群组个体之间的互动行为。在电影特效和游戏中具有广泛的应用,通常用来模拟成群结队的动物如蚂蚁,蜜蜂,老鼠,或鱼等的行进。群组动画的特点是:个体具有自主的行为,但又受周围其他个体的影响,从而形成一种看似凌乱却又整齐的视觉效果。1.1.2 昆虫群组动画的特点与鸟群、鱼群不同的是,昆虫(如蝶、蛾、蜂、蚊、蝇等)个体较小,群聚量大,通常飞行速度快,振翅频率高,属于一类较简单的群组动画。1.1.3 研究现状及已有研究结果关于群组动画的研究,reynolds等人在1987年提出了基本的群聚算法error! reference source not found.,kennedy等人在1994年提出基于自然生命模型的动画自动生成方法error! reference source not found.,tu xing在1995年提出一种基于群组的演化算法error! reference source not found.。目前,使用人工智能算法来制作群组动画较为普遍,但由于算法的局限性,往往不能实时地渲染动画。国内少有关于昆虫飞舞模型的资料和相关讨论。1.2 研究目的通常使用人工智能算法制作的群组动画,实现过程复杂,但其个体行为的自由度是其他方法不能比拟的。本论文以昆虫群组动画为例,在粒子系统上采用perlin噪声作为函数来“干预”个体行为,实现一类个体行为较简单的群组动画算法。另外,在电影、游戏中,经常出现大批昆虫飞舞的场景,如何高效且真实地渲染此类场景也是本文的主要研究目的。1.3 研究方法昆虫飞舞的方式虽然杂乱无序,但在空间中是相对均匀的,不会出现过度密集或过分分散的情况。而perlin 噪声恰好可以用来模拟这类“杂乱而有规律”的现象。因此设计一种粒子模型,使用perlin 噪声来生成速度域,利用该速度域求出粒子(个体)的速度。1.4 论文结果论文结果有以下两种形式:1、可执行程序的源代码。2、程序运行结果截图。1.5 论文结构本文主要是通过分析得出表达粒子速度的数学公式,并实现出昆虫群组动画。论文的组织结构如下:第1章:绪论,包括如下内容 研究目的:本文解决的问题可用于何种场合 研究方法:介绍perlin 噪声如何应用到本文模型中。 论文结果:论文应取得的结果形式和内容 论文结构:论文各部分的概要介绍第2章:研究背景和理论基础,包括如下内容 perlin噪声:介绍perlin噪声的基本知识 散度、旋度:解析几何的几个概念定义 runge-kutta算法:本实验中一个重要算法介绍第3章:详细设计及建模,包括如下内容 开发环境:简要介绍程序开发的平台 数据结构:以源代码的形式列出程序的基本数据结构 算法流程:使用程序流程图来描述程序的基本思想 模块的详细设计:以伪代码的形式列出程序的主要模块 效率分析:分析程序的时间复杂度第4章:实验结果演示,包括如下内容 实验平台:程序运行时的环境 实验结果:程序运行截图 结果分析:对程序效果的评价第5章:总结与展望 第二章 理论基础和建模2.1 理论基础2.1.1 perlin噪声perlin噪声(perlin noise)指由ken perlin发明的自然噪声生成算法,可以用来模拟自然界中的噪声现象。由于它的连续性,如果将二维噪声中的一个轴作为时间轴,得到的就是一个连续变化的一维函数。同样的也可以得到连续变化的二维图像。该噪声可以用来模拟人体的随机运动,蚂蚁行进的线路等。另外,还可以通过计算分形和模拟云朵,火焰等非常复杂的纹理。perlin噪声广泛地应用于计算机图形学中,主要应用有:texture(贴图)、terrain(地形)、bump map(凹凸)、cloud(云彩)、ray marching(烟雾)等。ken perlin曾因为其开发的经典perlin噪声算法而获得诸多奖项,也因为经典perlin噪声算法成为众所周知的早期计算机程序艺术家。perlin噪声函数同样被用于生成任意维度的随机速度场。由于此类速度场是有散度场,因此通常带有“凹槽”(即大量粒子集中到某个小区域内)。为避免这种情况发生,必须满足数学条件。我们将在后文中详细讨论该问题的解决方法。在介绍perlin噪声之前,先给出如下定义:图 0.1 正弦波图 0.2 不规则波波长(wavelength):两个波谷之间的距离。频率(frequency):波长的倒数,即1/wavelength。波幅(amplitude):是波的上下界。2.1.1.1 经典perlin噪声ken perlin于1985年在文献error! reference source not found.中提出了经典perlin噪声算法。他指出,使用随机方法产生的白噪声(图 2.3)和自然界物体的随机噪声有很大差别,不够真实。并提出一个理想噪声应该具有以下性质:1、对旋转具有统计不变性;2、能量在频谱上集中于一个窄带,即:图像是连续的,高频分量受限;3、对变换具有统计不变性。图 0.3 白噪声图 0.4 白噪声函数对于计算机图形学中的普遍应用,噪声应该是伪随机的,两次调用应得到同样的结果。图 0.3中的噪声之所以不够真实,是因为它的能量在频谱中平均分布,即它是白噪声。perlin中提出了一种产生符合要求的一维噪声函数的简单方法,这是后续工作的基础error! reference source not found.:1.在一维坐标轴上,选择等距的无穷个点,将值空间划分为等长的线段(为方便起见,选择坐标值为整数的点),为每个点随机指定一个值和一个梯度(在一维的情况,梯度就是斜率);2.对于坐标值为整数的点,将该点对应的值作为噪声图像上该点的值;对于坐标值不为整数的点,将相邻两点的值和根据梯度进行插值运算,获得该点的灰度。插值使用的函数是一个在0处为1,在1处为0,在0.5处为0.5的连续单调减函数。例如,设 c0, c1 为左右两整数点的颜色,t 为该点距离左边点的距离,使用 (1 t) 作为插值函数,则该点的值为 c1(1 t) + ct。(1 t) 是线性插值,得到的结果人工痕迹严重,且在整数点上不连续。perlin建议使用 3t2 2t3 作为插值函数error! reference source not found.,后来又建议使用 6t515t4+ 10t3 作为插值函数error! reference source not found.。对于二维的情况,可以将上述算法进行推广,即:为所有坐标为 (x, y) 且 x, y 都是整数的点指定一个值,同时指定一个梯度(下一小节会详细介绍),这些点将空间分成方格;对于坐标轴为整数的点,即上述方格的顶点,将为它指定的值作为该点的值;对于某个方格内部的点 (x, y),用所在方格四个顶点的值和梯度进行插值。例如,对于点 (x, y),令 它所在方格的四个顶点分别为: (i, j)、(i + 1, j)、(i + 1, j + 1)、(i, j + 1)。令 u = x i, v = y j,这四个顶点对点 (x, y) 的贡献可以用它们的梯度(g00, g10, g11, g01)和 (x, y) 点与这四个顶点的方向((u, v)、(u 1 ,v)、(u 1, v 1)、(u, v 1))进行点积获得。但是在二维的情况下,插值更为复杂。首先需要对 (i, j) 和 (i + 1, j) 两点在 x 方向插值,得到点 (x, j) 的值;之后对 (i, j + 1) 和 (i + 1, j + 1) 两点在x方向插值,得到点 (x, j + 1) 的值;最后对 (x, j) 和 (x, j + 1) 在 y 方向插值,得到 (x, y) 的值。图 2.5是对图 0.3中白噪声进行插值后的噪声图像。看起来较为柔和,这种经过插值平滑过的噪声,叫做关联噪声(coherent noise)。图 0.5 关联噪声图 0.6 插值后的噪声函数在三维的情况下,需要进行七次插值。可以证明,插值次数随着维数的增长指数增长。经典perlin噪声基本满足perlin提出的噪声条件。但是由于 3t2 2t3 导数中含有线性分量,在计算相邻点差时会体现出人工效果,不够自然。经典perlin噪声在进行分形和运算后效果不够自然(分形噪声将在后文中提到)。2.1.1.2 simplex噪声为了简化计算,方便使用硬件实现,ken perlin在2002年对他的方法进行了改进,改进的方法称为 simplex 噪声。simplex 噪声使用 6t5 15t4 + 10t3作为插值函数,杜绝了导数中的线性部分。另外,simplex 噪声算法有效地降低了插值次数。如上文,二维经典perlin噪声将二维空间用正方形填充,用四个顶点进行3次插值,而simplex噪声将二维空间用等边三角形填充,使用三个顶点进行插值。三维经典perlin噪声将三维空间用立方体进行填充,使用8个顶点进行7次插值,三维simplex噪声使用正四面体填充空间,用4个顶点进行插值。对于更高维(n维)的情况,经典perlin噪声将空间用超立方体填充,顶点数目是2n,而simplex噪声使用高维正三角形(称为simplex)进行填充,顶点数目为n + 1。simplex噪声插值次数随维数增长线性增长。对于二维的情况,使用正三角形填充空间使得直接判断某点落在哪个正三角形中,计算该三角形的顶点位置变得复杂。在实现上通常通过坐标变换将正三角形映射成直角三角形。使用该方法进行变换可以使用和经典perlin噪声相同的方法对顶点进行求值error! reference source not found.。2.1.1.3 梯度数组为了达到伪随机性,经典perlin噪声(和随后的simplex噪声)通过在一个转置数组perm中查询点的坐标求每个点的梯度(gradient),而不使用随机数发生器。这样两次调用可以获得同样的结果,达到伪随机性。这样做的另一个好处是,当产生高频率的噪声时,需要的顶点很多,相应的梯度若逐点存放,会消耗大量内存空间。为了降低内存的使用,perlin使用了1个256个元素的哈希表. 也就是说, 预先找出合理的, 足够随机的256个梯度, 存在一个表里. 然后每次需要某个顶点梯度值的时候,通过这个这个点的坐标,伪随机地在表里选出一个值。对于3d的情况,如果我们想要坐标(i,j,k)的梯度 g(i,j,k),而basis里预存储了256个gradient,那么:g(i, j, k) =basisperm ( i + perm (j + permk) mod 256 ) mod 256 这样,在生成perlin 噪声的时候,内存的使用限定在了1个256大小的哈希表。在02年, perlin进一步缩小了这个哈希表的大小到16error! reference source not found.。2.1.1.4 分型噪声将多个不同频率的噪声叠加后得到一个综合的噪声。分形噪声的特点是可以保证噪声的细节,同时通过改变噪声分量的参数来获得各种不同的综合噪声。分形噪声的数学定义如下: (2.1)图 2.7和图 2.8体现出了分形噪声的作用。图 0.7 多个不同频率的perlin噪声效果图 0.8 叠加后的噪声效果叠加后的噪声效果更为细腻逼真。2.1.2 散度和旋度散度指流体运动时单位体积的改变率。散度可以理解为一个流场中,某点的流速v在各方向的变化率之和,是一个标量。根据这个定义可以知道,如果在流场中取一小空间,其散度不为零的话,就说明有流入或流出的流体。当散度为零的话,说明该小空间的流体是连续的,没有多余的流体流入流进。所以,连续体的连续式就是以此式为零。旋度是矢量;其物理意义为环量密度,旋度为零,说明是无旋场;旋度不为零时,则说明是有旋场。旋度计算是两个向量之间的“叉乘”,其结果是矢量。其方向满足右手法则。2.1.3 runge-kutta算法龙格-库塔(runge-kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。对于一阶精度的欧拉公式有: yiyih*k1 k1=f(xi,yi) 当用点xi处的斜率近似值k1与右端点xi处的斜率k2的算术平均值作为平均斜率k*的近似值,那么就会得到二阶精度的改进欧拉公式: yiyih*( k1+ k2)/2 k1=f(xi,yi) k2=f(xi+h,yi+h*k1) 依次类推,如果在区间xi,xi+1内多预估几个点上的斜率值k1、k2、km,并用他们的加权平均数作为平均斜率k*的近似值,显然能构造出具有很高精度的高阶计算公式。经数学推导、求解,可以得出四阶龙格库塔公式,也就是在工程中应用广泛的经典龙格库塔算法: yiyih*( k1+ 2*k2 +2*k3+ k4)/6 k1=f(xi,yi) k2=f(xi+h/2,yi+h*k1/2) k3=f(xi+h/2,yi+h*k2/2) k4=f(xi+h,yi+h*k3)2.2 建模为了简化问题,将昆虫个体抽象为粒子,在三维笛卡尔坐标系中建立粒子系统,并进行计算。在建模过程中,发现昆虫群组动画模型与空气流动模型相似,具有不可压缩的特征。即速度域是无散度的。在2.1小节中提到,使用perlin噪声生成的速度场是有散度的,因此必须对其做数学变换,以满足无散度的特性。2.2.1 速度场一个无散度场的特征为:。我们设,则有,保证了速度域的无散度特性。在一个小范围空间内,我们使用位势场的旋度来计算速度场。在三维坐标系下,位势场是一个向量场:。定义速度场如下: (2.2)在计算机编程中,通常利用有限差分法(finite difference method)来计算微分方程及偏微分方程。把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组。解此方程组就可以得到原问题在离散点上的近似解。本文模型中使用粒子之间平均距离的10-4倍作为增量常数。2.2.2 位势场在三维坐标系下,我们分别使用perlin噪声函数向量生成位势场的每个分量。即:有一点要注意的是,的每个分量不能使用相同的函数,否则会削减粒子速度的随机性。robert bridson在文章中提出了一种解决方法,即在同一个perlin噪声函数中使用合适的偏移量改变参数以达到目的,并给出了一个参考实例error! reference source not found.: (2.3)2.2.3 碰撞检测考虑模型中会存在静止的物体(如地面,树干等),昆虫在飞行过程中不会撞到物体,更不会穿过物体。更进一步考虑,昆虫在即将撞到物体时会改变方向,并减慢自身速度。robert bridson同样给出了一种模拟流体绕过静止物体的数学函数,该函数适用于本模型error! reference source not found.。定义函数: (2.4)ramp函数是一个斜坡函数,距离物体越远,受物体影响越小,距离物体越近,受物体影响越大。令,在原公式中加入ramp函数来定义带有碰撞检测的位势场函数: (2.5)d0是某物体的中心,为某点到该物体的直线距离,为某点对该物体的法线。公式(2.4)第二部分的含义为:在物体周围逐渐衰减切线方向上的值,但保持法线方向的值不变。这样便得到一个切线方向的速度域。2.2.4 多个噪声函数考虑不同种类的昆虫,其飞舞效果也不尽相同。如蜜蜂个体较大,飞行速度较慢,方向变化较小;而蚊蝇类昆虫则速度较快,方向变化较大。我们利用分形原理来叠加多个不同频率的噪声,并通过改变每个噪声分量的参数来改变模型的视觉效果。第四章 系统设计与实现4.1 开发环境4.1.1 vs2010简介visual studio是一个全面集成的开发环境,用于编写、调试代码,把代码编译为程序集进行发布。visual studio 2010版本于2010年4月12日上市,其集成开发环境(ide)的界面被重新设计和组织,变得更加简单明了。visual studio 2010同时带来了net framework4.0、microsoft visual studio 2010 ctp( community technology preview-ctp),并且支持开发面向windows 7的应用程序。除了microsoft sql server,它还支持ibmdb2和oracle数据库。实际上,visual studio提供了一个非常专业的多文档界面应用程序,在该应用程序中可以进行与开发代码相关的任何操作,它提供了:l 文本编辑器:在文本编辑器中,可以编写c#代码。l 代码的设计视图编辑器:它可以在项目中可视化地放置用户界面和数据访问控件。此时,visual studio会自动在源文件中添加必要的c#代码,在项目中实例化这些控件。l 支持窗口:他们可以查看和修改项目的各个方面,例如,这些窗口可以显示源代码中的类以及windows窗体和web窗体类中的可用属性。也可以使用这些窗口指定编译选项,例如代码需要引用那些程序集。l 在环境中编译:可以只选择一个菜单选项编译项目,而不必在命令行上运行c#编译器。visual studio会调用c#编译器,把所有的相关命令行参数传递给编译器。l 集成的调试程序:编程的本质是代码在第一次运行时,一般不会正确执行。visual studio无缝地链接到一个调试程序上,可以在该调试环境中设置断点,观察变量。l 集成的msdn帮助:visual studio可以在ide中调试msdn文档说明。l 访问其他程序:visual studio还能调用许多其他工具来查看和修改计算机或网络的一些内容,而无需退出开发环境。4.1.2 opengl简介opengl是行业领域中最为广泛接纳的 2d/3d 图形 api, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。opengl是独立于操作系统的,亦是网络透明的。在包含cad、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,opengl帮助程序员实现在 pc、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。4.1.3 glut库的安装目前的glut库是glut-3.7.6.包含glut.h,glut32.lib,glut32.dll1、把glut.h放到vs2005的include目录中2、把glut32.lib放到vs2005的lib目录中3、把glut32.dll放到system32下4、在工程菜单中,选择“工程属性”按钮,双击“配置属性”标签,双击“链接器”标签,在“输入”的右边栏中“附加依赖项”的编辑框中输入opengl32.lib glu32.lib glaux.lib(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择ok结束。4.2 算法流程主要流程为:(1) 初始化窗口(2)开始初始化窗口,参数,生成初始粒子注册回调函数glutmainloop()否是定时器是否触发?保存当前粒子状态调用display()函数用rk方法算出dt时刻后的粒子位置glutpostredisplay()取一个粒子i利用求出i在当前位置的速度v利用v线性求出0.5dt后的近似位置mid利用求出mid位置的速度vin?新位置=当前位置+v*dt是否结束结束4.3 数据结构向量模板类:templatestruct vec t vn; vec(void) vec(t value_for_all) for(unsigned int i=0; in; +i) vi=value_for_all; template vec(const s *source) for(unsigned int i=0; in; +i) vi=(t)sourcei; vec(t v0, t v1) assert(n=2); v0=v0; v1=v1; vec(t v0, t v1, t v2) assert(n=3); v0=v0;

温馨提示

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

评论

0/150

提交评论