ogre3D学习基础3 -- 粒子与表层脚本

时间:2021-11-11 03:36:06

9、粒子脚本

  粒子脚本允许你实例化地在你的脚本代码中定义粒子系统,而不必在源代码中进行设置,使得你做任何修改都能得到快速回应。脚本里定义的粒子系统被用作模板,并且多个实际的系统可以在运行时从这里被创建。

  粒子系统属性:

  quota --- 设置这个系统在某一时刻所允许包含的最多粒子数。

    格式: quota <max_particles>

  material ----设置这个系统中的全体粒子将要使用的材质的名字。

    格式: material <material_name>

  particle_width --- 在世界坐标中,设置粒子的宽度。

    格式: particle_width <width>

  particle_height --- 在世界坐标中,设置粒子的高度。

    格式: particle_height <height>

  cull_each --- 所有的粒子系统都被包括在一个包含这个系统所有粒子的边界盒内。

    格式: cull_each <true|false>

  billboard_type --- 可以指定粒子有其自己的方向。

    格式: billboard_type <point|oriented_common|oriented_self|perpendicular_common|perpendicular_self>

  billboard_origin --- 指定所有公告板粒子的起始点,控制公告板粒子的出现位置。 

    格式: billboard_origin <top_left|top_center|top_right|center_left|center|center_right|bottom_left|bottom_center|bottom_right>

  billboard_rotation_type --- 指定公告板其它的旋转类型。

     格式: billboard_rotation_type <vertex|texcoord>

  common_direction ---如果billboard_type被设置为oriented_common或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向量。

    格式: common_direction <x> <y> <z>

  common_up_vector -- 如果billboard_type被设置为perpendicular_self或者perpendicular_common才需要,这个向量是用于定位系统中所有粒子的共用向上向量。

    格式: common_up_vector <x> <y> <z>

  renderer --- 粒子系统并不渲染它本身,它们通过ParticleRenderer类完成这一点。默认的是'billboard'。

    格式: renderer <renderer_name>

  sorted --- 默认情况下,粒子是不排序的。若设定这个属性为'真',粒子将会根据摄影机的位置关系被排序,最远的优先.

    格式: sorted <true|false>

  local_space -- 此选项可以让粒子保持附加在粒子发射器所在的局部空间内并直接跟随它们.

    格式: local_space <true|false>

  point_rendering --- 设置与否关系到公告板将使用点渲染而不是手动生成渲染画面。
  accurate_facing ---  设置摄像机的旋转与公告板的关系。

    格式: accurate_facing on|off

  iteration_interval --- 可以使用这个选项设定升级频率为固定的间隔,在低帧率时,粒子更新会按固定的间隔重复,直到帧率恢复正常。0值意为默认帧时间循环。

     格式: iteration_interval <secs>

  nonvisible_update_timeout ---- 选项让你在粒子系统上设置一个'timeout'时限,以便如果它这么长时间不可见,即停止更新,直到它下次可见。值0表示关闭timeout,总是更新。

     格式: nonvisible_update_timeout <secs>

 

    粒子发射器属性

  angle----设置发射的粒子可以偏离发射方向的最大角。

    格式: angle <degrees>

  colour---为所有发射的粒子设置一个静态颜色。

    格式: colour <r g b> [<a>]

  colour_range_start和colour_range_end---制定了被发射出去的粒子的可用颜色范围。实际的颜色将会在这两个值之间随机选择。

    格式: 同 colour  示例(随机生成红蓝之间的颜色): colour_range_start 1 0 0 colour_range_end 0 0 1

  direction---设置发射器的方向。随着其它可移动物体改变节点方向,发射器也会随着移动。

    格式: direction <x> <y> <z>

  emission_rate----设置每秒要发射多少粒子。

    格式: emission_rate <particles_per_second>

  position---设置发射器相对于粒子系统所在的场景节点所处的位置。

    格式: position <x> <y> <z>

  velocity---给所有粒子设置发射时的速率。

    格式: velocity <world_units_per_second>

  velocity_min & velocity_max---每一个粒子都是以在这个范围内的随机速率被发射出去的。  

    格式: 同 velocity

  time_to_live---设置每个粒子在被销毁之前存活的秒数。

    格式: time_to_live <seconds>

  time_to_live_min & time_to_live_max---每个粒子在发射时得到这一范围内的一个随机的数值,作为其存在时间。

    格式: 同 time_to_live  示例: time_to_live_min 2 time_to_live_max 5

  duration---设置发射器处于活动状态的秒数。发射器可以被再次打开,查看repeat_delay。数值0意味着无限时

    格式: duration <seconds>

  duration_min & duration_max---除了这两个属性是设置一个可变的时间范围外,其它的与duration一样。

    格式: 同 duration 

  repeat_delay---设置重新开始发射需要等待的秒数。
    格式: repeat_delay <seconds>     示例: repeat_delay 2.5

  repeat_delay_min & repeat_delay_max----这两个属性除了是设置重新开始需要等待的时间范围外。

    格式: 同 repeat_delay  示例: repeat_delay 2 repeat_delay 5

  

    标准粒子发射器

  Point Emitter --点发射
  Box Emitter --- 3维盒子发射
  Cylinder Emitter -- 沿Z轴摆放的圆柱体区域内的随机方向发射粒子
  Ellipsoid Emitter --- 椭圆体形状的区域里发射粒子
  Hollow Ellipsoid Emitter --- 除了椭圆体中心有一个空洞区域不发射粒子外,其他方向发射
  Ring Emitter -- 环状区域发射粒子

    粒子影响器按类型分

  LinearForce影响器 --- 对所有粒子应用一个力。

  ColourFader影响器 --- 改变飞行中的粒子的颜色。

  标准粒子影响器

  Linear Force Affector -- 对所有粒子施加一个力,改变粒子的运动轨迹。可以用于重力,风力,或者其它线性力.

1 affector LinearForce
2 {
3 // 设置写在这里,影响器类型的名字(LinearForce)是大小写敏感的。
4 }

  ColourFader Affector  -- 修改飞行中的粒子的颜色。

1 affector ColourFader
2 {
3 // 设置写在这里
4 }

  ColourFader2 Affector -- 修改两种颜色,在粒子存续期内,指定还剩一段时间时,激活第二个颜色改变状态。

1 affector ColourFader2
2 {
3 // 设置写在这里
4 }

  Scaler Affector -- 调节飞行中的粒子的大小。

1 affector Scaler
2 {
3 // 设置写在这里
4 }

  Rotator Affector -- 依靠旋转粒子的贴图纹理来旋转飞行中的粒子。

1 affector Rotator
2 {
3 // 设置写在这里
4 }

  ColourInterpolator Affector -- 修改飞行中的粒子的颜色,它在粒子存续期内在几种状态间插值变换粒子的颜色。

1 affector ColourInterpolator
2 {
3 // 设置写在这里
4 }

  ColourImage Affector -- 从一个指定的图像文件中取得颜色。在粒子的存续时间内,颜色的取值范围是从图像的左侧开始向右移动。

1 affector ColourImage
2 {
3 // 设置写在这里
4 }

  DeflectorPlane Affector -- 定义一个平面,这个平面反弹碰到它的粒子。
  DirectionRandomiser Affector -- 随机选定粒子运动的方向。

 10 、表层脚本(Overlay)

  表层脚本提供给你用脚本定义图层以方便重复使用的能力。通过模板向层中添加元素。

 

 表层元素(OverlayElement)属性

metrics_mode---用来设置元素的大小和位置的单位。

  格式: metrics_mode <pixels|relative> 示例: metrics_mode pixels

horz_align---设置此元素的水平对齐,即水平起点的位置。

  格式: horz_align <left|center|right> 示例: horz_align center

vert_align---设置此元素的垂直对齐,即垂直起点的位置。

  格式: vert_align <top|center|bottom> 示例: vert_align center

left---设置元素相对于它上一层的水平位置。

  格式: left <value> 示例: left 0.5

top---设置元素相对于它上一层的垂直位置。

  格式: top <value> 示例: top 0.5

width---以屏幕宽度的某一比率设置元素的宽度。

  格式: width <value> 示例: width 0.25

height---以屏幕高度的某一比率设置元素的高度。

  格式: height <value> 示例: height 0.25

material---设置用于此元素的材质名。

  格式: material <name> 示例: material Examples/TestMaterial

caption---设置元素的文本标题。

  格式: caption <string> 示例: caption This is a caption

rotation---设置元素的旋转。

  格式: rotation <angle_in_degrees> <axis_x> <axis_y> <axis_z> 示例: rotation 30 0 0 1

  标准表层元素 

  Panel (面板容器)-- 能够包含其他元素(或容器)的矩形区域的面板,只有当透明处于关闭状态时,才会显示。
  BorderPanel(容器) -- 有一个单独的可以随着面板调节大小的边框,面板被分为9块区域进行渲染。
  TextArea(文本区域)-- 可以用来渲染文本的普通元素。 

11、字体定义脚本

  Ogre使用基于纹理的字体渲染TextAreaOverlayElement。字体的最终格式是一个由字体生成的Material对象,以及一组"glyph"(字符轮廓)纹理坐标信息。所有字体定义被保存在.fontdef文件中,基本格式如下:

 <font_name>
{
type <image | truetype>//使用预先设计好的字体
source <image file | truetype font file>//资源,字体名称
...
... custom attributes depending on type//
}