您的位置:首页 > Web前端

翻译:Panda3D Manual/V. Programming with Panda/S. Particle Effects

2008-04-15 18:30 711 查看
粒子效果(Particle Effects
粒子效果由一些小的图像在相同的外力作用下运动形成。粒子经历一个出生、移动、死亡的过程。粒子系统是动态的,用于实现烟花、泡沫、蒸汽等效果,甚至可以用来模拟一大群气球。
从 本质上讲,任何粒子系统都需要3个关键部分:渲染器(renderer)、发射器(emitter)和工厂(factory)。渲染器将粒子转化成屏幕上 可见的物体;发射器为粒子分配初始位置和速度系列;工厂生产粒子并为它们分配属性。每个部分都有许多种不同的类型,每一种都有自己的参数。
单靠代码创建粒子系统比较困难, Panda为我们提供了一个粒子系统面板。本章主要介绍粒子面板的使用以及与粒子效果相关的大量变量。

使用粒子面板(Using the Particle Panel
必须从python命令提示符启用粒子面板。打开命令行,进入你的文件夹,运行:
ppython
import direct.directbase.DirectStart
from direct.tkpanels import ParticlePanel
pp = ParticlePanel.ParticlePanel()
run()
一旦你将粒子效果设计完,就将文件保存。对它进行一些修改后,就可以插入到项目代码里。首先,拷贝代码粘贴到已有的项目代码里。在第一行上面添加:
from direct.particles.ParticleEffect import ParticleEffect
from direct.particles.Particles import Particles
from pandac.PandaModules import *
from direct.interval.MetaInterval import Sequence
from direct.interval.FunctionInterval import Func
from direct.particles.ParticleEffect import ParticleEffect
f = ParticleEffect()
然后,将所有“self.”变量替换成“f.”。最后,在粒子效果代码末尾添加:
t = Sequence(Func(f.start, render, render),)
t.start()
除此以外,你必须通过一个base命令来启用粒子特效:
base.enableParticles()

粒子效果基本参数(Particle Effect Basic Parameters
每一个粒子特效都需要至少11个参数,它们支配着整体的属性,例如屏幕上粒子的数量,粒子出生和死亡的速度,以及粒子效果使用的渲染器、发射器和工厂。
变量
定义

poolSize
同时存在的最多粒子数
[0, 正无穷)
birthRate
粒子出生的间隔(秒)
(0, 正无穷)
litterSize
每一次出生的粒子数
[1, 正无穷)
litterSpread
颗粒大小的差异
[0, 正无穷)
localVelocityFlag
速度是否绝对
布尔值
systemGrowsOlder
系统是否有寿命
布尔值
systemLifespan
系统的年限(秒)
[0, 正无穷)
BaseParticleRenderer* renderer
指向粒子渲染器的指针
渲染器类型
BaseParticleRenderer* emitter
指向粒子发射器的指针
发射器类型
BaseParticleRenderer* factory
指向粒子工厂的指针
工厂类型
渲染器、发射器和工厂类型将在接下来3节里介绍。

粒子工厂(Particle Factories
粒子工厂有2种类型,Point和ZSpin。在粒子面板上我们虽然可以看到第三种Oriented类型,但这种工厂目前还不可用。2种工厂之间的区别体现在粒子的方向和旋转能力上。
首先,各类型工厂公共的参数有:
变量
定义

lifespanBase
平均寿命(秒)
[0, 正无穷)
lifespanSpread
寿命的差异
[0, 正无穷)
massBase
平均粒子群
[0, 正无穷)
massSpread
粒子群的差异
[0, 正无穷)
terminalVelocityBase
平均粒子最终速度
[0, 正无穷)
terminalVelocitySpread
最终速度的差异
[0, 正无穷)
Point粒子工厂生产简单的粒子,它们没有其他的参数。
ZSpin粒子工厂生产绕Z轴旋转的粒子,Z轴在Panda3D中为垂直轴。它们有一些额外的参数:
变量
定义

initialAngle
起始角度(度)
[0, 360]
initialAngleSpread
起始角度的散布
[0, 360]
finalAngle
最终角度(度)
[0, 360]
fnalAngleSpread
最终角度的散布
[0, 360]
粒子发射器(Particle Emitters
粒子发射器有很多种,根据它们代表的体积空间区分。所有发射器都有3种模式:explicit、radiate和custom。explicit模式从同一个方向平行地发射粒子;radiate模式从某个点发射粒子;custom模式以发射器指定的速度发射粒子。
所有发射器公共的参数是:
变量
定义

emissionType
发射模式
ET_EXPLICIT、ET_RADIATE、 ET_CUSTOM
explicitLaunchVector
explicit模式下的初始速度
(x, y, z)
radiateOrigin
radiate模式下点Point粒子的发射点
(x, y, z)
amplitude
发射速度的倍数
(负无穷, 正无穷)
amplitudeSpeed
发射速度倍数的扩散
[0, 正无穷)
接下来列出各种类型的发射器独有的参数,及其在custom模式下的效果:
BoxEmitter
变量
定义

minBound
箱体最小的点
(x, y, z)
maxBound
箱体最大的点
(x, y, z)
custom模式产生没有初始速度的粒子。
DiscEmitter
变量
定义

radius
圆盘的半径
[0, 正无穷)
outerAngle
圆盘边界上粒子的发射角度
[0, 360]
innterAngle
圆盘中心粒子的发射角度
[0, 360]
outerMagnitude
圆盘边界上粒子发射速度的倍数
(负无穷, 正无穷)
innerMagnitude
圆盘中心粒子发射速度的倍数
(负无穷, 正无穷)
cubicLerping
数量/角度是否为立方插值
布尔值
custom模式使用最后5个参数。从圆盘内部发射的粒子使用插值后的数量和角度,插值方法为线性插值或立方插值。
PointEmitter
变量
定义

location
外部点的位置
(x, y, z)
custom模式产生没有初始速度的粒子。
RectangleEmitter
变量
定义

minBound
定义矩形的2维点
(x, z)
maxBound
定义矩形的2维点
(x, z)
custom模式产生没有初始速度的粒子。
RingEmitter
变量
定义

radius
圆盘的半径
[0, 正无穷)
angle
粒子发射角度
[0, 360]
custom模式使用第2个参数,以相对于从圆环中心到粒子生成点的向量的一个角度发射粒子。0度时从中心向外发射粒子,180度时向中心发射粒子。
SphereSurfaceEmitter
变量
定义

radius
球体的半径
[0, 正无穷)
custom模式从球体中心向外发射粒子。粒子的速度与生成点在球体内的位置有关。球体中心速度为0,球的外边界为1,中间位置的速度在两者间线性插值。
TangentRingEmitter
变量
定义

radius
圆环的半径
[0, 正无穷)
custom模式发射粒子的速度与圆环边界无关,量级都为1。

粒子渲染器(Particle Renderers
粒子渲染器根据存储在粒子对象里的信息和渲染器类型将粒子添加到可见的scene graph之中。所有粒子渲染器共有以下参数:
变量
定义

alphaMode
贯穿粒子生命周期的alpha设置
PR_ALPHA_NONE、PR_ALPHA_OUT、 PR_ALPHA_IN、PR_ALPHA_USER
userAlpha
ALPHA_USER alpha模式的alpha值
布尔值
接下来列出各种类型的渲染器独有的参数:
PointParticleRenderer
该渲染器把粒子渲染成像素点。
变量
定义

pointSize
点的宽和高(以像素为单位)
[0, 正无穷)
startColor
开始颜色
(r, g, b, a)
endColor
结束颜色
(r, g, b, a)
blendType
粒子以何种方式从开始颜色过渡到结束颜色
ONE_COLOR、BLEND_LIFE、 BLEND_VEL
blendMethod
颜色插值方法
LINEAR、CUBIC(线性、立方)
ONE_COLOR: 点保持开始颜色不变。
BLEND_LIFE: 颜色根据点的寿命从开始向结束插值。
BLEND_VEL: 颜色根据速度/最终速度在开始和结束之间插值。
LineParticleRenderer
该渲染器把粒子渲染成当前位置和最终位置之间的线段。
变量
定义

headColor
头部的颜色
(r, g, b, a)
tailColor
尾端的颜色
(r, g, b, a)
SparkleParticleRenderer
该渲染器把粒子渲染成星星或闪光的物体,3条等长的正交轴围成的形状,就像抓子游戏(jacks)里的抓子。当闪光粒子看起来小于一个像素时就会闪光。
变量
定义

centerColor
中心的颜色
(r, g, b, a)
edgeColor
边界的颜色
(r, g, b, a)
birthRadius
初始的闪光半径
[0, 正无穷)
deathRadius
最终的闪光半径
[0, 正无穷)
lifeScale
是否保持出生时的闪光半径
NO_SCALE、SCALE
SpriteParticleRenderer
该渲染器使用Panda3D纹理对象把粒子渲染成图像。图像总是朝向用户。
变量
定义

texture
被用作精灵图像的Panda纹理对象
(r, g, b, a)
color
颜色
(r, g, b, a)
xScaleFlag
如果true,x轴大小在粒子生命周期内插值
布尔值
yScaleFlag
如果true,y轴大小在粒子生命周期内插值
布尔值
animAngleFlag
如果true,粒子绕着Z轴旋转
布尔值
initial_X_Scale
初始的x轴比例系数
[0, 正无穷)
final_X_Scale
最终的x轴比例系数
[0, 正无穷)
initial_Y_Scale
初始的y轴比例系数
[0, 正无穷)
final_Y_Scale
最终的y轴比例系数
[0, 正无穷)
nonAnimatedTheta
如果false,所有精灵设成绕着Z轴逆时针旋转,以度为单位
布尔值
alphaBlendMethod
设置插值混合方法
LINEAR、CUBIC(线性、立方)
alphaDisable
如果true,不允许进行alpha混合(alpha blending)
布尔值
GeomParticleRenderer
该渲染器把粒子渲染成完整的3D模型,它需要一个几何体节点。
变量
定义

geomNode
一个几何体scene graph节点
<Node>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: