目录(?)[+]
粒子脚本允许实例化地在自己的脚本代码中定义粒子系统,而不必在源代码中进行设置,可以在做任何修改对哦能得到快速的回应,脚本里定义的粒子系统被用作模版,并且多个实际的系统可以在运行时从脚本里被创建。
粒子系统脚本在系统初始化时被装载:默认它在普通资源所在位置搜寻.particle后缀的文件并分析它,如果想分析不同扩展名的文件,调用ParticleSystemManager::getSingleton().parseAllSources方法,或者是想分析单个文件,使用ParticleSystemManager::getSingletion().parseScripe. 一旦脚本被分析完,就可以基于这些代码使用SceneManager::createParticleSystem()方法实例化系统。
粒子脚本格式解析
particle_system Examples/GreenyNimbus
{
//设置这个系统中的全体粒子将要使用的材质名称。此系统中的全部粒子使用相同的材质,尽管每一个粒子可以通过使用它自己的颜色属性为材质附加颜色。
//格式:material<material_name> 示例:material Example/Flare 默认:none(空材质)
material Examples/FlarePointSprite
//在世界坐标中,设置粒子的宽度,当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_width 35
//在世界坐标中,设置粒子的高度。当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_height 35
//所有的粒子系统都被包括在一个包含这个系统所有粒子的边界盒内,这对一般的局部的有限的粒子系统,如大部分粒子是同时可见的或者是同时不可见的,是足够的,但是,
//对于那些在更大面积上扩散的粒子(例如,一个雨水系统),实际上也许想要单独的处理每一个粒子以便节约时间,因为很可能只有一小部分的粒子是可见的,可以通过设置 //cull__each的参数为真。默认的是false
cull_each false
//设置这个系统在某一时刻所允许包含的最多粒子数。当达到这个限制时,粒子发射器将不允许再发射粒子,直到某些粒子被消灭(例如,它们的time_to_live存续时间用尽)。值得注意的是,你几乎是肯定要改变这个设置的,因为默认值太短了(粒子池只能增加,而不能减少)。
格式: quota <max_particles>
示例: quota 10000
默认: 10
//
这实际上是'公告板'粒子渲染器(默认)的一个属性,同时也是通过在系统声明中直接声明的方法给粒子渲染器传递属性的一个示例。使用默认渲染器的粒子被用公告板进行渲染,即由2个旋转到面向指定方向的三角形组成的矩形构成的平面。但是,定向一个公告板有不止一种方法。传统方法是公告板直接面对摄像机:这也是默认的方法。但是,这种安排只是对于表现像光晕一样的模糊的球状物看上去还算可以。对于更多的诸如激光射线这样的线性效果,事实上你想要粒子有其自己的方向。
格式: billboard_type <point|oriented_common|oriented_self|perpendicular_common|perpendicular_self>
示例: billboard_type oriented_self
默认: point
此参数有如下选项:
billboard_type point
粒子系统并不渲染它本身,它们通过ParticleRenderer类完成这一点。那些类被带着一个管理器注册,为的是给粒子系统提供一个特殊的外观。OGRE默认配置了一个基于公告板的渲染器(billboard-based renderer),但是更多的可以通过插件增加。粒子渲染器要用一个唯一的名字注册,你可以利用这个名字决定使用哪个渲染器。默认的是'billboard'。
粒子渲染器可以有属性,并且可以通过在根粒子系统中设定属性进行传递。
格式: renderer <renderer_name>
默认: billboard
默认情况下,粒子是不排序的。若设定这个属性为'真',粒子将会根据摄影机的位置关系被排序,最远的优先。通过花费一小点儿排序的代价,就可以制作出特定的渲染效果。
格式: sorted <true|false>
默认: false
默认情况下,粒子是被发射到世界空间的,例如,如果你改变了粒子系统所在的节点,它不会影响到粒子本身(只是粒子发射器)。这就意味着给出了一般期望的行为,即建立了真实世界的粒子离开发射它们的物体后独立运动的模型。但是,要建立一些效果,你可能想让粒子保持附加在粒子发射器所在的局部空间内并直接跟随它们。这个选项就可以让你实现这一点。
格式: local_space <true|false>
默认: false
指定所有公告板粒子的起始点,控制公告板粒子的出现位置。
格式: billboard_origin <top_left|top_center|top_right|center_left|center|center_right|bottom_left|bottom_center|bottom_right>
示例: billboard_origin top_right
默认: center
此参数有如下选项:
默认情况下,公告板粒子会根据粒子旋转去旋转纹理坐标。但是旋转纹理坐标有一些缺点,例如,纹理的四角会在旋转后丢失,而当使用折叠地址模式或者子纹理采样时,公告板的四角会被不想要的纹理区域填充。这个设置允许你指定其它的旋转类型。
格式: billboard_rotation_type <vertex|texcoord>
示例: billboard_rotation_type vertex
默认: texcoord
此参数有如下选项:
如果billboard_type被设置为oriented_common或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向量。
格式: common_direction <x> <y> <z>
示例: common_direction 0 -1 0
默认: 0 0 1
如果billboard_type被设置为perpendicular_self或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向上向量。
格式: common_up_vector <x> <y> <z>
示例: common_up_vector 0 1 0
默认: 0 1 0
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,设置与否关系到公告板将使用点渲染而不是手动生成渲染画面。
默认情况下,公告板区域依靠内存中的一块纹理矩形生成的几何体渲染的,要考虑到大小和方向设置,以及将它装载入显卡的问题。可选择的方式是使用硬件指针渲染,即意味着每个公告板只有一个位置需要被传送而不是4个,并且硬件依据渲染状态排序如何渲染。
虽然使用点渲染较手动生成渲染区域更快,但是多了许多限制。限制如下:
如果你使用这个选项,你将几乎是肯定要打开材质通路中的point attenuation和point sprites。
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,且设置与否关系到公告板区域将使用一个有些慢但更精确的计算使公告板面向摄像机。默认使用摄像机方向,这样更快,但同时意味着,当你旋转摄像机时,公告板不会保持相同的方向。'accurate_facing true'选项基于从每一个公告板到摄像机的向量进行计算,即意味着即使摄像机旋转方向也是一致的。
格式: accurate_facing on|off
默认: accurate_facing off 0
通常粒子系统是基于帧率被更新的;但是随着更极端的帧率范围,这可以给出不同的结果,特别是低帧率。你可以使用这个选项设定升级频率为固定的间隔,在低帧率时,粒子更新会按固定的间隔重复,直到帧率恢复正常。0值意为默认帧时间循环。
格式: iteration_interval <secs>
示例: iteration_interval 0.01
默认: iteration_interval 0
当粒子系统在其已经无法可见需要停止更新时设置。默认情况下,可见粒子系统一直更新,即使不在视口内。这意味着当它们进入视口时可以保证一致性。但是,更新粒子系统所花费的代价可能是很昂贵的。
这个选项让你在粒子系统上设置一个'timeout'时限,以便如果它这么长时间不可见,即停止更新,直到它下次可见。值0表示关闭timeout,总是更新。
格式: nonvisible_update_timeout <secs>
示例: nonvisible_update_timeout 10
默认: nonvisible_update_timeout 0
粒子发射器按类型划分为几类,例如:Point发射器从单独一点发射,而Box发射器则是从一块儿区域随机发射。新的发射器可以通过插件加入到Ogre中去。向系统中增加一个发射器需要将发射器嵌入到其它块中,以关键字“emitter”后跟发射器类型名(大小写敏感)开头。Ogre现在支持'Point','Box','Cylinder','Ellipsoid','HollowEllipsoid'以及'Ring'发射器。
设置发射的粒子可以偏离发射方向的最大角(按角度计算,参看 direction)。此值设置为10允许粒子在任一方向上最多偏离发射方向10度。值180意味着可以朝任意方向发射,而0意味着总是精确地沿发射器方向发射。
格式: angle <degrees>
示例: angle 30
默认: 0
为所有发射的粒子设置一个静态颜色。也可参看colour_range_start和colour_range_end属性,设置一组颜色。颜色参数的格式是"r g b a",每个分量的取值范围是从0到1之间,alpha值是可选项(如果未指定,则假定alpha为1)。
格式: colour <r g b> [<a>]
示例: colour 1 0 0 1
默认: 1 1 1 1
除了这两个属性必须一起制定外,其它的都和'colour'属性一样,并且制定了被发射出去的粒子的可用颜色范围。实际的颜色将会在这两个值之间随机选择。
格式: 同 colour
示例(随机生成红蓝之间的颜色): colour_range_start 1 0 0 colour_range_end 0 0 1
默认: 都是 1 1 1 1
设置发射器的方向。这与粒子系统所在的SceneNode有关,意思就是随着其它可移动物体改变节点方向,发射器也会随着移动。
格式: direction <x> <y> <z>
示例: direction 0 1 0
默认: 1 0 0
设置每秒要发射多少粒子。在连续发射过程中,个别发射器不是必须发射这些的——这是一个相对参数,发射器可能选择每半秒就发射完所有的粒子,这主要取决于发射器。此属性也会受到粒子系统的'quota'设置的限制。
格式: emission_rate <particles_per_second>
示例: emission_rate 50
默认: 10
设置发射器相对于粒子系统所在的场景节点所处的位置。
格式: position <x> <y> <z>
示例: position 10 0 40
默认: 0 0 0
给所有粒子设置发射时的速率。也可参看velocity_min和velocity_max两个属性,它们允许你设置一个速率范围,而不是一个固定不变的值。
格式: velocity <world_units_per_second>
示例: velocity 100
默认: 1
这两个属性除了是设置一个速率范围外,其它的与'velocity'一样。而且每一个粒子都是以在这个范围内的随机速率被发射出去的。
格式: 同 velocity
示例: velocity_min 50 velocity_max 100
默认: 都是 1
设置每个粒子在被销毁之前存活的秒数。粒子影响器是可以改变这个数值的,但是这个值是发射时才传给粒子的。参看time_to_live_min和time_to_live_max属性,这连个可以让你设置一个生命时间范围,而不是一个固定的数值。
格式: time_to_live <seconds>
示例: time_to_live 10
默认: 5
这两个属性除了是设置一个生命时间范围以外,其它的与time_to_live一样,并且每个粒子在发射时得到这一范围内的一个随机的数值,作为其存在时间。
格式: 同 time_to_live
示例: time_to_live_min 2 time_to_live_max 5
默认: 都是 5
设置发射器处于活动状态的秒数。发射器可以被再次打开,查看repeat_delay。数值0意味着无限时。参看duration_min和duration_max属性,这两个属性可以让你设置一个时间范围,而不是一个固定值。
格式: duration <seconds>
示例: duration 2.5
默认: 0
除了这两个属性是设置一个可变的时间范围外,其它的与duration一样。
格式: 同 duration
示例: duration_min 2 duration_max 5
默认: 都是 0
设置重新开始发射需要等待的秒数。参看repeat_delay_min和repeat_delay_max属性,这两个属性允许你设置一个repeat_delays时间范围,而不是设置一个固定的值。
格式: repeat_delay <seconds>
示例: repeat_delay 2.5
默认: 0
这两个属性除了是设置重新开始需要等待的时间范围外,其它的与repeat_delay一样,并且每次发射器被启动,它都会在这个范围内得到一个随机数值,作为重新开始发射需要的等待时间。
格式: 同 repeat_delay
示例: repeat_delay 2 repeat_delay 5
默认: 都是 0
这个发射器从一个定点,即它所在的位置,发射粒子。除了标准发射器属性,这个发射器没有其它属性。
要创建一个点发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emmiter Point { // Settings go here }
请注意,发生器的名字('Point')是大小写敏感的。
这个发射器从一个3维盒子里的随机位置发射粒子。它有额外的属性:
要创建一个盒发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emitter Box { // Settings go here }
这个发射器从一个沿Z轴摆放的圆柱体区域内的随机方向发射粒子。这个发射器有着与Box Emitter完全一致的参数,所以在此不多赘言——宽度和高度决定圆柱体沿坐标轴的形状(如果宽度和高度不同,那么得到的结果是椭圆柱体),深度决定了圆柱体的长度。
这个发射器是从一个椭圆体形状的区域里发射粒子的,例如一个球体或者压扁了的球体区域。参数再一次与Box Emitter相似,除了维度描述为每个坐标轴上的范围最广的点。
这个发射器很像Ellipsoid Emitter,除了椭圆体中心有一个空洞区域不发射粒子。因此,它有3个额外的参数定义这个空洞区域:
这个发射器从一个环状区域发射粒子。除了只有2个维度外,有点像Hollow Ellipsoid Emitter。
在粒子逾期时产生新的发射器是可能的,例如产生火焰类型的效果。这是通过以下指令控制的:
粒子影响器可以在粒子存续期间对粒子进行修改。它们按“类型”分为:LinearForce影响器,对所有粒子应用一个力;ColourFader影响器改变飞行中的粒子的颜色。新的影响器可以通过创建插件的形式增加到Ogre中来。你可以通过将影响器嵌套在另一个别的程序块里的办法,向系统中增加一个影响器,以关键字affector开头,后跟影响器的类型名(注意:大小写敏感)。Ogre当前支持LinearForce和ColourFader两种影响器。
粒子影响器事实上没有统一的属性;属性都是每种影响器特有的。
这个影响器对所有粒子施加一个力,改变粒子的运动轨迹。可以用于重力,风力,或者其它线性力。其额外属性有:
要创建一个线性力影响器,需要你的粒子系统脚本中包含一段如下代码:
affector LinearForce { // 设置写在这里 }
请注意:影响器类型的名字(LinearForce)是大小写敏感的。
此影响器修改飞行中的粒子的颜色。额外的属性有:
affector ColourFader { // 设置写在这里 }
此影响器类似ColourFader Affector,只不过这个影响器有两个颜色改变状态。在粒子存续期内,指定还剩一段时间时,激活第二个颜色改变状态。
要创建一个颜色减弱2影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourFader2 { // 设置写在这里 }
此影响器调节飞行中的粒子的大小。额外的属性有:
要创建一个伸缩影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector Scaler { // 设置写在这里 }
此影响器依靠旋转粒子的贴图纹理来旋转飞行中的粒子。额外的属性有:
要创建一个旋转影响器,需要在你的粒子系统脚本中包含如下一段代码:
ColourInterpolator Affector
类似于ColourFader和ColourFader2,此影响器也是修改飞行中的粒子的颜色。只不过这个影响器有一组不定个数的已经定义好的状态。它在粒子存续期内在几种状态间插值变换粒子的颜色。额外的属性有:
状态数是可变的。最多6个。即time5和colour5是最后的参数。要想创建一个颜色插值影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourInterpolator { // 设置写在这里 }
这是另一个改变飞行粒子的颜色的影响器,但替代编程定义颜色的是,从一个指定的图像文件中取得颜色。在粒子的存续时间内,颜色的取值范围是从图像的左侧开始向右移动,因此,只使用了水平方向的图像。额外属性有:
要创建一个图像颜色影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourImage { // 设置写在这里 }
此影响器定义一个平面,这个平面反弹碰到它的粒子。额外的属性有:
此影响器随机选定粒子运动的方向。额外属性有:
目录(?)[+]
粒子脚本允许实例化地在自己的脚本代码中定义粒子系统,而不必在源代码中进行设置,可以在做任何修改对哦能得到快速的回应,脚本里定义的粒子系统被用作模版,并且多个实际的系统可以在运行时从脚本里被创建。
粒子系统脚本在系统初始化时被装载:默认它在普通资源所在位置搜寻.particle后缀的文件并分析它,如果想分析不同扩展名的文件,调用ParticleSystemManager::getSingleton().parseAllSources方法,或者是想分析单个文件,使用ParticleSystemManager::getSingletion().parseScripe. 一旦脚本被分析完,就可以基于这些代码使用SceneManager::createParticleSystem()方法实例化系统。
粒子脚本格式解析
particle_system Examples/GreenyNimbus
{
//设置这个系统中的全体粒子将要使用的材质名称。此系统中的全部粒子使用相同的材质,尽管每一个粒子可以通过使用它自己的颜色属性为材质附加颜色。
//格式:material<material_name> 示例:material Example/Flare 默认:none(空材质)
material Examples/FlarePointSprite
//在世界坐标中,设置粒子的宽度,当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_width 35
//在世界坐标中,设置粒子的高度。当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_height 35
//所有的粒子系统都被包括在一个包含这个系统所有粒子的边界盒内,这对一般的局部的有限的粒子系统,如大部分粒子是同时可见的或者是同时不可见的,是足够的,但是,
//对于那些在更大面积上扩散的粒子(例如,一个雨水系统),实际上也许想要单独的处理每一个粒子以便节约时间,因为很可能只有一小部分的粒子是可见的,可以通过设置 //cull__each的参数为真。默认的是false
cull_each false
//设置这个系统在某一时刻所允许包含的最多粒子数。当达到这个限制时,粒子发射器将不允许再发射粒子,直到某些粒子被消灭(例如,它们的time_to_live存续时间用尽)。值得注意的是,你几乎是肯定要改变这个设置的,因为默认值太短了(粒子池只能增加,而不能减少)。
格式: quota <max_particles>
示例: quota 10000
默认: 10
//
这实际上是'公告板'粒子渲染器(默认)的一个属性,同时也是通过在系统声明中直接声明的方法给粒子渲染器传递属性的一个示例。使用默认渲染器的粒子被用公告板进行渲染,即由2个旋转到面向指定方向的三角形组成的矩形构成的平面。但是,定向一个公告板有不止一种方法。传统方法是公告板直接面对摄像机:这也是默认的方法。但是,这种安排只是对于表现像光晕一样的模糊的球状物看上去还算可以。对于更多的诸如激光射线这样的线性效果,事实上你想要粒子有其自己的方向。
格式: billboard_type <point|oriented_common|oriented_self|perpendicular_common|perpendicular_self>
示例: billboard_type oriented_self
默认: point
此参数有如下选项:
billboard_type point
粒子系统并不渲染它本身,它们通过ParticleRenderer类完成这一点。那些类被带着一个管理器注册,为的是给粒子系统提供一个特殊的外观。OGRE默认配置了一个基于公告板的渲染器(billboard-based renderer),但是更多的可以通过插件增加。粒子渲染器要用一个唯一的名字注册,你可以利用这个名字决定使用哪个渲染器。默认的是'billboard'。
粒子渲染器可以有属性,并且可以通过在根粒子系统中设定属性进行传递。
格式: renderer <renderer_name>
默认: billboard
默认情况下,粒子是不排序的。若设定这个属性为'真',粒子将会根据摄影机的位置关系被排序,最远的优先。通过花费一小点儿排序的代价,就可以制作出特定的渲染效果。
格式: sorted <true|false>
默认: false
默认情况下,粒子是被发射到世界空间的,例如,如果你改变了粒子系统所在的节点,它不会影响到粒子本身(只是粒子发射器)。这就意味着给出了一般期望的行为,即建立了真实世界的粒子离开发射它们的物体后独立运动的模型。但是,要建立一些效果,你可能想让粒子保持附加在粒子发射器所在的局部空间内并直接跟随它们。这个选项就可以让你实现这一点。
格式: local_space <true|false>
默认: false
指定所有公告板粒子的起始点,控制公告板粒子的出现位置。
格式: billboard_origin <top_left|top_center|top_right|center_left|center|center_right|bottom_left|bottom_center|bottom_right>
示例: billboard_origin top_right
默认: center
此参数有如下选项:
默认情况下,公告板粒子会根据粒子旋转去旋转纹理坐标。但是旋转纹理坐标有一些缺点,例如,纹理的四角会在旋转后丢失,而当使用折叠地址模式或者子纹理采样时,公告板的四角会被不想要的纹理区域填充。这个设置允许你指定其它的旋转类型。
格式: billboard_rotation_type <vertex|texcoord>
示例: billboard_rotation_type vertex
默认: texcoord
此参数有如下选项:
如果billboard_type被设置为oriented_common或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向量。
格式: common_direction <x> <y> <z>
示例: common_direction 0 -1 0
默认: 0 0 1
如果billboard_type被设置为perpendicular_self或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向上向量。
格式: common_up_vector <x> <y> <z>
示例: common_up_vector 0 1 0
默认: 0 1 0
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,设置与否关系到公告板将使用点渲染而不是手动生成渲染画面。
默认情况下,公告板区域依靠内存中的一块纹理矩形生成的几何体渲染的,要考虑到大小和方向设置,以及将它装载入显卡的问题。可选择的方式是使用硬件指针渲染,即意味着每个公告板只有一个位置需要被传送而不是4个,并且硬件依据渲染状态排序如何渲染。
虽然使用点渲染较手动生成渲染区域更快,但是多了许多限制。限制如下:
如果你使用这个选项,你将几乎是肯定要打开材质通路中的point attenuation和point sprites。
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,且设置与否关系到公告板区域将使用一个有些慢但更精确的计算使公告板面向摄像机。默认使用摄像机方向,这样更快,但同时意味着,当你旋转摄像机时,公告板不会保持相同的方向。'accurate_facing true'选项基于从每一个公告板到摄像机的向量进行计算,即意味着即使摄像机旋转方向也是一致的。
格式: accurate_facing on|off
默认: accurate_facing off 0
通常粒子系统是基于帧率被更新的;但是随着更极端的帧率范围,这可以给出不同的结果,特别是低帧率。你可以使用这个选项设定升级频率为固定的间隔,在低帧率时,粒子更新会按固定的间隔重复,直到帧率恢复正常。0值意为默认帧时间循环。
格式: iteration_interval <secs>
示例: iteration_interval 0.01
默认: iteration_interval 0
当粒子系统在其已经无法可见需要停止更新时设置。默认情况下,可见粒子系统一直更新,即使不在视口内。这意味着当它们进入视口时可以保证一致性。但是,更新粒子系统所花费的代价可能是很昂贵的。
这个选项让你在粒子系统上设置一个'timeout'时限,以便如果它这么长时间不可见,即停止更新,直到它下次可见。值0表示关闭timeout,总是更新。
格式: nonvisible_update_timeout <secs>
示例: nonvisible_update_timeout 10
默认: nonvisible_update_timeout 0
粒子发射器按类型划分为几类,例如:Point发射器从单独一点发射,而Box发射器则是从一块儿区域随机发射。新的发射器可以通过插件加入到Ogre中去。向系统中增加一个发射器需要将发射器嵌入到其它块中,以关键字“emitter”后跟发射器类型名(大小写敏感)开头。Ogre现在支持'Point','Box','Cylinder','Ellipsoid','HollowEllipsoid'以及'Ring'发射器。
设置发射的粒子可以偏离发射方向的最大角(按角度计算,参看 direction)。此值设置为10允许粒子在任一方向上最多偏离发射方向10度。值180意味着可以朝任意方向发射,而0意味着总是精确地沿发射器方向发射。
格式: angle <degrees>
示例: angle 30
默认: 0
为所有发射的粒子设置一个静态颜色。也可参看colour_range_start和colour_range_end属性,设置一组颜色。颜色参数的格式是"r g b a",每个分量的取值范围是从0到1之间,alpha值是可选项(如果未指定,则假定alpha为1)。
格式: colour <r g b> [<a>]
示例: colour 1 0 0 1
默认: 1 1 1 1
除了这两个属性必须一起制定外,其它的都和'colour'属性一样,并且制定了被发射出去的粒子的可用颜色范围。实际的颜色将会在这两个值之间随机选择。
格式: 同 colour
示例(随机生成红蓝之间的颜色): colour_range_start 1 0 0 colour_range_end 0 0 1
默认: 都是 1 1 1 1
设置发射器的方向。这与粒子系统所在的SceneNode有关,意思就是随着其它可移动物体改变节点方向,发射器也会随着移动。
格式: direction <x> <y> <z>
示例: direction 0 1 0
默认: 1 0 0
设置每秒要发射多少粒子。在连续发射过程中,个别发射器不是必须发射这些的——这是一个相对参数,发射器可能选择每半秒就发射完所有的粒子,这主要取决于发射器。此属性也会受到粒子系统的'quota'设置的限制。
格式: emission_rate <particles_per_second>
示例: emission_rate 50
默认: 10
设置发射器相对于粒子系统所在的场景节点所处的位置。
格式: position <x> <y> <z>
示例: position 10 0 40
默认: 0 0 0
给所有粒子设置发射时的速率。也可参看velocity_min和velocity_max两个属性,它们允许你设置一个速率范围,而不是一个固定不变的值。
格式: velocity <world_units_per_second>
示例: velocity 100
默认: 1
这两个属性除了是设置一个速率范围外,其它的与'velocity'一样。而且每一个粒子都是以在这个范围内的随机速率被发射出去的。
格式: 同 velocity
示例: velocity_min 50 velocity_max 100
默认: 都是 1
设置每个粒子在被销毁之前存活的秒数。粒子影响器是可以改变这个数值的,但是这个值是发射时才传给粒子的。参看time_to_live_min和time_to_live_max属性,这连个可以让你设置一个生命时间范围,而不是一个固定的数值。
格式: time_to_live <seconds>
示例: time_to_live 10
默认: 5
这两个属性除了是设置一个生命时间范围以外,其它的与time_to_live一样,并且每个粒子在发射时得到这一范围内的一个随机的数值,作为其存在时间。
格式: 同 time_to_live
示例: time_to_live_min 2 time_to_live_max 5
默认: 都是 5
设置发射器处于活动状态的秒数。发射器可以被再次打开,查看repeat_delay。数值0意味着无限时。参看duration_min和duration_max属性,这两个属性可以让你设置一个时间范围,而不是一个固定值。
格式: duration <seconds>
示例: duration 2.5
默认: 0
除了这两个属性是设置一个可变的时间范围外,其它的与duration一样。
格式: 同 duration
示例: duration_min 2 duration_max 5
默认: 都是 0
设置重新开始发射需要等待的秒数。参看repeat_delay_min和repeat_delay_max属性,这两个属性允许你设置一个repeat_delays时间范围,而不是设置一个固定的值。
格式: repeat_delay <seconds>
示例: repeat_delay 2.5
默认: 0
这两个属性除了是设置重新开始需要等待的时间范围外,其它的与repeat_delay一样,并且每次发射器被启动,它都会在这个范围内得到一个随机数值,作为重新开始发射需要的等待时间。
格式: 同 repeat_delay
示例: repeat_delay 2 repeat_delay 5
默认: 都是 0
这个发射器从一个定点,即它所在的位置,发射粒子。除了标准发射器属性,这个发射器没有其它属性。
要创建一个点发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emmiter Point { // Settings go here }
请注意,发生器的名字('Point')是大小写敏感的。
这个发射器从一个3维盒子里的随机位置发射粒子。它有额外的属性:
要创建一个盒发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emitter Box { // Settings go here }
这个发射器从一个沿Z轴摆放的圆柱体区域内的随机方向发射粒子。这个发射器有着与Box Emitter完全一致的参数,所以在此不多赘言——宽度和高度决定圆柱体沿坐标轴的形状(如果宽度和高度不同,那么得到的结果是椭圆柱体),深度决定了圆柱体的长度。
这个发射器是从一个椭圆体形状的区域里发射粒子的,例如一个球体或者压扁了的球体区域。参数再一次与Box Emitter相似,除了维度描述为每个坐标轴上的范围最广的点。
这个发射器很像Ellipsoid Emitter,除了椭圆体中心有一个空洞区域不发射粒子。因此,它有3个额外的参数定义这个空洞区域:
这个发射器从一个环状区域发射粒子。除了只有2个维度外,有点像Hollow Ellipsoid Emitter。
在粒子逾期时产生新的发射器是可能的,例如产生火焰类型的效果。这是通过以下指令控制的:
粒子影响器可以在粒子存续期间对粒子进行修改。它们按“类型”分为:LinearForce影响器,对所有粒子应用一个力;ColourFader影响器改变飞行中的粒子的颜色。新的影响器可以通过创建插件的形式增加到Ogre中来。你可以通过将影响器嵌套在另一个别的程序块里的办法,向系统中增加一个影响器,以关键字affector开头,后跟影响器的类型名(注意:大小写敏感)。Ogre当前支持LinearForce和ColourFader两种影响器。
粒子影响器事实上没有统一的属性;属性都是每种影响器特有的。
这个影响器对所有粒子施加一个力,改变粒子的运动轨迹。可以用于重力,风力,或者其它线性力。其额外属性有:
要创建一个线性力影响器,需要你的粒子系统脚本中包含一段如下代码:
affector LinearForce { // 设置写在这里 }
请注意:影响器类型的名字(LinearForce)是大小写敏感的。
此影响器修改飞行中的粒子的颜色。额外的属性有:
affector ColourFader { // 设置写在这里 }
此影响器类似ColourFader Affector,只不过这个影响器有两个颜色改变状态。在粒子存续期内,指定还剩一段时间时,激活第二个颜色改变状态。
要创建一个颜色减弱2影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourFader2 { // 设置写在这里 }
此影响器调节飞行中的粒子的大小。额外的属性有:
要创建一个伸缩影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector Scaler { // 设置写在这里 }
此影响器依靠旋转粒子的贴图纹理来旋转飞行中的粒子。额外的属性有:
要创建一个旋转影响器,需要在你的粒子系统脚本中包含如下一段代码:
ColourInterpolator Affector
类似于ColourFader和ColourFader2,此影响器也是修改飞行中的粒子的颜色。只不过这个影响器有一组不定个数的已经定义好的状态。它在粒子存续期内在几种状态间插值变换粒子的颜色。额外的属性有:
状态数是可变的。最多6个。即time5和colour5是最后的参数。要想创建一个颜色插值影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourInterpolator { // 设置写在这里 }
这是另一个改变飞行粒子的颜色的影响器,但替代编程定义颜色的是,从一个指定的图像文件中取得颜色。在粒子的存续时间内,颜色的取值范围是从图像的左侧开始向右移动,因此,只使用了水平方向的图像。额外属性有:
要创建一个图像颜色影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourImage { // 设置写在这里 }
此影响器定义一个平面,这个平面反弹碰到它的粒子。额外的属性有:
此影响器随机选定粒子运动的方向。额外属性有:
目录(?)[+]
粒子脚本允许实例化地在自己的脚本代码中定义粒子系统,而不必在源代码中进行设置,可以在做任何修改对哦能得到快速的回应,脚本里定义的粒子系统被用作模版,并且多个实际的系统可以在运行时从脚本里被创建。
粒子系统脚本在系统初始化时被装载:默认它在普通资源所在位置搜寻.particle后缀的文件并分析它,如果想分析不同扩展名的文件,调用ParticleSystemManager::getSingleton().parseAllSources方法,或者是想分析单个文件,使用ParticleSystemManager::getSingletion().parseScripe. 一旦脚本被分析完,就可以基于这些代码使用SceneManager::createParticleSystem()方法实例化系统。
粒子脚本格式解析
particle_system Examples/GreenyNimbus
{
//设置这个系统中的全体粒子将要使用的材质名称。此系统中的全部粒子使用相同的材质,尽管每一个粒子可以通过使用它自己的颜色属性为材质附加颜色。
//格式:material<material_name> 示例:material Example/Flare 默认:none(空材质)
material Examples/FlarePointSprite
//在世界坐标中,设置粒子的宽度,当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_width 35
//在世界坐标中,设置粒子的高度。当billboard_type()被设置为point或者perpendicular_self时,这个属性是绝对值,而当billboard_type是oriented_common , oriented_self
//或者perpendicular_common时,它是依方向向量的长度而定的。
particle_height 35
//所有的粒子系统都被包括在一个包含这个系统所有粒子的边界盒内,这对一般的局部的有限的粒子系统,如大部分粒子是同时可见的或者是同时不可见的,是足够的,但是,
//对于那些在更大面积上扩散的粒子(例如,一个雨水系统),实际上也许想要单独的处理每一个粒子以便节约时间,因为很可能只有一小部分的粒子是可见的,可以通过设置 //cull__each的参数为真。默认的是false
cull_each false
//设置这个系统在某一时刻所允许包含的最多粒子数。当达到这个限制时,粒子发射器将不允许再发射粒子,直到某些粒子被消灭(例如,它们的time_to_live存续时间用尽)。值得注意的是,你几乎是肯定要改变这个设置的,因为默认值太短了(粒子池只能增加,而不能减少)。
格式: quota <max_particles>
示例: quota 10000
默认: 10
//
这实际上是'公告板'粒子渲染器(默认)的一个属性,同时也是通过在系统声明中直接声明的方法给粒子渲染器传递属性的一个示例。使用默认渲染器的粒子被用公告板进行渲染,即由2个旋转到面向指定方向的三角形组成的矩形构成的平面。但是,定向一个公告板有不止一种方法。传统方法是公告板直接面对摄像机:这也是默认的方法。但是,这种安排只是对于表现像光晕一样的模糊的球状物看上去还算可以。对于更多的诸如激光射线这样的线性效果,事实上你想要粒子有其自己的方向。
格式: billboard_type <point|oriented_common|oriented_self|perpendicular_common|perpendicular_self>
示例: billboard_type oriented_self
默认: point
此参数有如下选项:
billboard_type point
粒子系统并不渲染它本身,它们通过ParticleRenderer类完成这一点。那些类被带着一个管理器注册,为的是给粒子系统提供一个特殊的外观。OGRE默认配置了一个基于公告板的渲染器(billboard-based renderer),但是更多的可以通过插件增加。粒子渲染器要用一个唯一的名字注册,你可以利用这个名字决定使用哪个渲染器。默认的是'billboard'。
粒子渲染器可以有属性,并且可以通过在根粒子系统中设定属性进行传递。
格式: renderer <renderer_name>
默认: billboard
默认情况下,粒子是不排序的。若设定这个属性为'真',粒子将会根据摄影机的位置关系被排序,最远的优先。通过花费一小点儿排序的代价,就可以制作出特定的渲染效果。
格式: sorted <true|false>
默认: false
默认情况下,粒子是被发射到世界空间的,例如,如果你改变了粒子系统所在的节点,它不会影响到粒子本身(只是粒子发射器)。这就意味着给出了一般期望的行为,即建立了真实世界的粒子离开发射它们的物体后独立运动的模型。但是,要建立一些效果,你可能想让粒子保持附加在粒子发射器所在的局部空间内并直接跟随它们。这个选项就可以让你实现这一点。
格式: local_space <true|false>
默认: false
指定所有公告板粒子的起始点,控制公告板粒子的出现位置。
格式: billboard_origin <top_left|top_center|top_right|center_left|center|center_right|bottom_left|bottom_center|bottom_right>
示例: billboard_origin top_right
默认: center
此参数有如下选项:
默认情况下,公告板粒子会根据粒子旋转去旋转纹理坐标。但是旋转纹理坐标有一些缺点,例如,纹理的四角会在旋转后丢失,而当使用折叠地址模式或者子纹理采样时,公告板的四角会被不想要的纹理区域填充。这个设置允许你指定其它的旋转类型。
格式: billboard_rotation_type <vertex|texcoord>
示例: billboard_rotation_type vertex
默认: texcoord
此参数有如下选项:
如果billboard_type被设置为oriented_common或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向量。
格式: common_direction <x> <y> <z>
示例: common_direction 0 -1 0
默认: 0 0 1
如果billboard_type被设置为perpendicular_self或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向上向量。
格式: common_up_vector <x> <y> <z>
示例: common_up_vector 0 1 0
默认: 0 1 0
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,设置与否关系到公告板将使用点渲染而不是手动生成渲染画面。
默认情况下,公告板区域依靠内存中的一块纹理矩形生成的几何体渲染的,要考虑到大小和方向设置,以及将它装载入显卡的问题。可选择的方式是使用硬件指针渲染,即意味着每个公告板只有一个位置需要被传送而不是4个,并且硬件依据渲染状态排序如何渲染。
虽然使用点渲染较手动生成渲染区域更快,但是多了许多限制。限制如下:
如果你使用这个选项,你将几乎是肯定要打开材质通路中的point attenuation和point sprites。
事实上,这是‘公告板’粒子渲染器(默认设置)的一个属性,且设置与否关系到公告板区域将使用一个有些慢但更精确的计算使公告板面向摄像机。默认使用摄像机方向,这样更快,但同时意味着,当你旋转摄像机时,公告板不会保持相同的方向。'accurate_facing true'选项基于从每一个公告板到摄像机的向量进行计算,即意味着即使摄像机旋转方向也是一致的。
格式: accurate_facing on|off
默认: accurate_facing off 0
通常粒子系统是基于帧率被更新的;但是随着更极端的帧率范围,这可以给出不同的结果,特别是低帧率。你可以使用这个选项设定升级频率为固定的间隔,在低帧率时,粒子更新会按固定的间隔重复,直到帧率恢复正常。0值意为默认帧时间循环。
格式: iteration_interval <secs>
示例: iteration_interval 0.01
默认: iteration_interval 0
当粒子系统在其已经无法可见需要停止更新时设置。默认情况下,可见粒子系统一直更新,即使不在视口内。这意味着当它们进入视口时可以保证一致性。但是,更新粒子系统所花费的代价可能是很昂贵的。
这个选项让你在粒子系统上设置一个'timeout'时限,以便如果它这么长时间不可见,即停止更新,直到它下次可见。值0表示关闭timeout,总是更新。
格式: nonvisible_update_timeout <secs>
示例: nonvisible_update_timeout 10
默认: nonvisible_update_timeout 0
粒子发射器按类型划分为几类,例如:Point发射器从单独一点发射,而Box发射器则是从一块儿区域随机发射。新的发射器可以通过插件加入到Ogre中去。向系统中增加一个发射器需要将发射器嵌入到其它块中,以关键字“emitter”后跟发射器类型名(大小写敏感)开头。Ogre现在支持'Point','Box','Cylinder','Ellipsoid','HollowEllipsoid'以及'Ring'发射器。
设置发射的粒子可以偏离发射方向的最大角(按角度计算,参看 direction)。此值设置为10允许粒子在任一方向上最多偏离发射方向10度。值180意味着可以朝任意方向发射,而0意味着总是精确地沿发射器方向发射。
格式: angle <degrees>
示例: angle 30
默认: 0
为所有发射的粒子设置一个静态颜色。也可参看colour_range_start和colour_range_end属性,设置一组颜色。颜色参数的格式是"r g b a",每个分量的取值范围是从0到1之间,alpha值是可选项(如果未指定,则假定alpha为1)。
格式: colour <r g b> [<a>]
示例: colour 1 0 0 1
默认: 1 1 1 1
除了这两个属性必须一起制定外,其它的都和'colour'属性一样,并且制定了被发射出去的粒子的可用颜色范围。实际的颜色将会在这两个值之间随机选择。
格式: 同 colour
示例(随机生成红蓝之间的颜色): colour_range_start 1 0 0 colour_range_end 0 0 1
默认: 都是 1 1 1 1
设置发射器的方向。这与粒子系统所在的SceneNode有关,意思就是随着其它可移动物体改变节点方向,发射器也会随着移动。
格式: direction <x> <y> <z>
示例: direction 0 1 0
默认: 1 0 0
设置每秒要发射多少粒子。在连续发射过程中,个别发射器不是必须发射这些的——这是一个相对参数,发射器可能选择每半秒就发射完所有的粒子,这主要取决于发射器。此属性也会受到粒子系统的'quota'设置的限制。
格式: emission_rate <particles_per_second>
示例: emission_rate 50
默认: 10
设置发射器相对于粒子系统所在的场景节点所处的位置。
格式: position <x> <y> <z>
示例: position 10 0 40
默认: 0 0 0
给所有粒子设置发射时的速率。也可参看velocity_min和velocity_max两个属性,它们允许你设置一个速率范围,而不是一个固定不变的值。
格式: velocity <world_units_per_second>
示例: velocity 100
默认: 1
这两个属性除了是设置一个速率范围外,其它的与'velocity'一样。而且每一个粒子都是以在这个范围内的随机速率被发射出去的。
格式: 同 velocity
示例: velocity_min 50 velocity_max 100
默认: 都是 1
设置每个粒子在被销毁之前存活的秒数。粒子影响器是可以改变这个数值的,但是这个值是发射时才传给粒子的。参看time_to_live_min和time_to_live_max属性,这连个可以让你设置一个生命时间范围,而不是一个固定的数值。
格式: time_to_live <seconds>
示例: time_to_live 10
默认: 5
这两个属性除了是设置一个生命时间范围以外,其它的与time_to_live一样,并且每个粒子在发射时得到这一范围内的一个随机的数值,作为其存在时间。
格式: 同 time_to_live
示例: time_to_live_min 2 time_to_live_max 5
默认: 都是 5
设置发射器处于活动状态的秒数。发射器可以被再次打开,查看repeat_delay。数值0意味着无限时。参看duration_min和duration_max属性,这两个属性可以让你设置一个时间范围,而不是一个固定值。
格式: duration <seconds>
示例: duration 2.5
默认: 0
除了这两个属性是设置一个可变的时间范围外,其它的与duration一样。
格式: 同 duration
示例: duration_min 2 duration_max 5
默认: 都是 0
设置重新开始发射需要等待的秒数。参看repeat_delay_min和repeat_delay_max属性,这两个属性允许你设置一个repeat_delays时间范围,而不是设置一个固定的值。
格式: repeat_delay <seconds>
示例: repeat_delay 2.5
默认: 0
这两个属性除了是设置重新开始需要等待的时间范围外,其它的与repeat_delay一样,并且每次发射器被启动,它都会在这个范围内得到一个随机数值,作为重新开始发射需要的等待时间。
格式: 同 repeat_delay
示例: repeat_delay 2 repeat_delay 5
默认: 都是 0
这个发射器从一个定点,即它所在的位置,发射粒子。除了标准发射器属性,这个发射器没有其它属性。
要创建一个点发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emmiter Point { // Settings go here }
请注意,发生器的名字('Point')是大小写敏感的。
这个发射器从一个3维盒子里的随机位置发射粒子。它有额外的属性:
要创建一个盒发射器,需要在你的粒子系统脚本中包含类似下面的部分:
emitter Box { // Settings go here }
这个发射器从一个沿Z轴摆放的圆柱体区域内的随机方向发射粒子。这个发射器有着与Box Emitter完全一致的参数,所以在此不多赘言——宽度和高度决定圆柱体沿坐标轴的形状(如果宽度和高度不同,那么得到的结果是椭圆柱体),深度决定了圆柱体的长度。
这个发射器是从一个椭圆体形状的区域里发射粒子的,例如一个球体或者压扁了的球体区域。参数再一次与Box Emitter相似,除了维度描述为每个坐标轴上的范围最广的点。
这个发射器很像Ellipsoid Emitter,除了椭圆体中心有一个空洞区域不发射粒子。因此,它有3个额外的参数定义这个空洞区域:
这个发射器从一个环状区域发射粒子。除了只有2个维度外,有点像Hollow Ellipsoid Emitter。
在粒子逾期时产生新的发射器是可能的,例如产生火焰类型的效果。这是通过以下指令控制的:
粒子影响器可以在粒子存续期间对粒子进行修改。它们按“类型”分为:LinearForce影响器,对所有粒子应用一个力;ColourFader影响器改变飞行中的粒子的颜色。新的影响器可以通过创建插件的形式增加到Ogre中来。你可以通过将影响器嵌套在另一个别的程序块里的办法,向系统中增加一个影响器,以关键字affector开头,后跟影响器的类型名(注意:大小写敏感)。Ogre当前支持LinearForce和ColourFader两种影响器。
粒子影响器事实上没有统一的属性;属性都是每种影响器特有的。
这个影响器对所有粒子施加一个力,改变粒子的运动轨迹。可以用于重力,风力,或者其它线性力。其额外属性有:
要创建一个线性力影响器,需要你的粒子系统脚本中包含一段如下代码:
affector LinearForce { // 设置写在这里 }
请注意:影响器类型的名字(LinearForce)是大小写敏感的。
此影响器修改飞行中的粒子的颜色。额外的属性有:
affector ColourFader { // 设置写在这里 }
此影响器类似ColourFader Affector,只不过这个影响器有两个颜色改变状态。在粒子存续期内,指定还剩一段时间时,激活第二个颜色改变状态。
要创建一个颜色减弱2影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourFader2 { // 设置写在这里 }
此影响器调节飞行中的粒子的大小。额外的属性有:
要创建一个伸缩影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector Scaler { // 设置写在这里 }
此影响器依靠旋转粒子的贴图纹理来旋转飞行中的粒子。额外的属性有:
要创建一个旋转影响器,需要在你的粒子系统脚本中包含如下一段代码:
ColourInterpolator Affector
类似于ColourFader和ColourFader2,此影响器也是修改飞行中的粒子的颜色。只不过这个影响器有一组不定个数的已经定义好的状态。它在粒子存续期内在几种状态间插值变换粒子的颜色。额外的属性有:
状态数是可变的。最多6个。即time5和colour5是最后的参数。要想创建一个颜色插值影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourInterpolator { // 设置写在这里 }
这是另一个改变飞行粒子的颜色的影响器,但替代编程定义颜色的是,从一个指定的图像文件中取得颜色。在粒子的存续时间内,颜色的取值范围是从图像的左侧开始向右移动,因此,只使用了水平方向的图像。额外属性有:
要创建一个图像颜色影响器,需要在你的粒子系统脚本中包含如下一段代码:
affector ColourImage { // 设置写在这里 }
此影响器定义一个平面,这个平面反弹碰到它的粒子。额外的属性有:
此影响器随机选定粒子运动的方向。额外属性有: