ogre3D学习基础3 -- 粒子与表层脚本
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_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//
}
ogre3D学习基础3 -- 粒子与表层脚本的更多相关文章
- ogre3D学习基础1 -- 核心对象与脚本技术
一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...
- ogre3D学习基础18 -- 材质的使用与脚本的简单书写
这一节以基础16为基础,练习材质的使用. 第一,看看框架 //material #include "ExampleApplication.h" class TutorialAppl ...
- ogre3D学习基础19 --- 材质的继承,纹理的滚动与旋转
以上一节为基础,废话不多说. 首先新增一个节点,用于比较显示 //新增一个节点 ent = mSceneMgr->createEntity("Quad"); ent-> ...
- ogre3D学习基础5 -- 阴影与动画
五.阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系. 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1.建立场 ...
- ogre3D学习基础7---材质详解
物体着色的基础 --- 四种不同光照作用 1.环境反射 近似的模拟了场景中的全局辐射,也就是用来近似模拟所有光在场景中不断散射的结果.材质中有相应的属性来代表这种环境反射颜色. 2.漫反射 这种颜色是 ...
- ogre3D学习基础6---场景管理器的使用
场景管理器的使用 最常使用的坐标系统空间(同时也是Ogre程序所能提供的)即是世界空间(World).父节点空间(Parent)以及本地空间(Local). 1.世界空间 就是物体所存在的地方,当我们 ...
- ogre3D学习基础17 --- 如何手动创建ogre程序
建立自己的Ogre程序 一直以来都是使用ExampleApplication.h来写程序,现在来看看它到底有什么神奇的地方. 首先,我们新建一个win32空项目 然后配置环境 最后新建define.c ...
- ogre3D学习基础15 -- 创建BSP Scene Manager
BSP(binary-space partitioning) Scene Manager(二叉空间分割)场景管理器比较适合用于室内场景. 第一,添加框架代码如下 #include "Exam ...
- ogre3D学习基础13 -- 键盘控制网格动画mesh
以上一节为蓝本,这里增加一点难度,添加了四个节点,增加键盘控制移动速度,使用bool变量控制是否移动. 第一,要增加键盘控制,那就使用OIS::KeyListener,在监听器里添加一个父类KeyLi ...
随机推荐
- CAS登录认证的简单介绍
参考博客: https://www.jianshu.com/p/8daeb20abb84 下面是CAS最基本的协议过程: 下面是CAS Web工作流程图: 名词解释 Ticket Grangting ...
- extends 继承
继承的作用:子类可以直接拥有父类成员:其中,私有成员和构造函数不参与继承: java中类继承的特点:只支持单一继承和多重继承,不支持多继承(一个类不能同时继承多个类) 继承中成员变量的特点:子类中可以 ...
- JAVA时间加工类
/** * 当天凌晨 */ public static Calendar startOfDay(Calendar c) { if (c == null) { return c; } c.set(Cal ...
- YII2 定义页面提示
控制器里面这样写: 单条消息: 键值是规定好的,不要去自定义哦! \Yii::$app->getSession()->setFlash('error', 'This is the mess ...
- Copy Failed Error Access to fobidden
使用SVN的branch/tag命令来切包时,报出了一下错误提示 就这个错误,调了整整一天,如果你也遇到了类似问题,我真心希望下面解决问题的过程能帮助到你:D 解决过程: 1.网上查了很多帖子,发现跟 ...
- 500 Days Of Summer
<和莎莫的500天>,一部爱情片. Summer和Tom两人不同的爱情观走在了一起,或许真的就是爱情观不同,或许是Summer爱Tom爱的不够深,最终的结局是那么不尽人意. 有人愿意把秘密 ...
- pta数据结构编程题
编程题6 树的同构 编程题7 List Leaves 编程题8 Tree Traversals Again 编程题10 Root of AVL Tree 编程题12 堆中的路径 编程题13 File ...
- Android(java)学习笔记88:BaseAdapter适配器重写之getView()
1. BaseAdapter适配器重写 之getView(): (1)View getview(int position, View convertview, ViewGroup parent ) 第 ...
- 2018.5.21 . XMLSpy激活的方法
127.0.0.1 altova.com #XMLspy 127.0.0.1 www.altova.com #XMLspy 127.0.0.1 link.altova.com #XMLspy 追加加到 ...
- RabbitMQ使用教程(五)如何保证队列里的消息99.99%被消费?
1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 RabbitMQ使用 ...