翻译: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个参数,它们支配着整体的属性,例如屏幕上粒子的数量,粒子出生和死亡的速度,以及粒子效果使用的渲染器、发射器和工厂。
渲染器、发射器和工厂类型将在接下来3节里介绍。
粒子工厂(Particle Factories)
粒子工厂有2种类型,Point和ZSpin。在粒子面板上我们虽然可以看到第三种Oriented类型,但这种工厂目前还不可用。2种工厂之间的区别体现在粒子的方向和旋转能力上。
首先,各类型工厂公共的参数有:
Point粒子工厂生产简单的粒子,它们没有其他的参数。
ZSpin粒子工厂生产绕Z轴旋转的粒子,Z轴在Panda3D中为垂直轴。它们有一些额外的参数:
粒子发射器(Particle Emitters)
粒子发射器有很多种,根据它们代表的体积空间区分。所有发射器都有3种模式:explicit、radiate和custom。explicit模式从同一个方向平行地发射粒子;radiate模式从某个点发射粒子;custom模式以发射器指定的速度发射粒子。
所有发射器公共的参数是:
接下来列出各种类型的发射器独有的参数,及其在custom模式下的效果:
BoxEmitter
custom模式产生没有初始速度的粒子。
DiscEmitter
custom模式使用最后5个参数。从圆盘内部发射的粒子使用插值后的数量和角度,插值方法为线性插值或立方插值。
PointEmitter
custom模式产生没有初始速度的粒子。
RectangleEmitter
custom模式产生没有初始速度的粒子。
RingEmitter
custom模式使用第2个参数,以相对于从圆环中心到粒子生成点的向量的一个角度发射粒子。0度时从中心向外发射粒子,180度时向中心发射粒子。
SphereSurfaceEmitter
custom模式从球体中心向外发射粒子。粒子的速度与生成点在球体内的位置有关。球体中心速度为0,球的外边界为1,中间位置的速度在两者间线性插值。
TangentRingEmitter
custom模式发射粒子的速度与圆环边界无关,量级都为1。
粒子渲染器(Particle Renderers)
粒子渲染器根据存储在粒子对象里的信息和渲染器类型将粒子添加到可见的scene graph之中。所有粒子渲染器共有以下参数:
接下来列出各种类型的渲染器独有的参数:
PointParticleRenderer
该渲染器把粒子渲染成像素点。
ONE_COLOR: 点保持开始颜色不变。
BLEND_LIFE: 颜色根据点的寿命从开始向结束插值。
BLEND_VEL: 颜色根据速度/最终速度在开始和结束之间插值。
LineParticleRenderer
该渲染器把粒子渲染成当前位置和最终位置之间的线段。
SparkleParticleRenderer
该渲染器把粒子渲染成星星或闪光的物体,3条等长的正交轴围成的形状,就像抓子游戏(jacks)里的抓子。当闪光粒子看起来小于一个像素时就会闪光。
SpriteParticleRenderer
该渲染器使用Panda3D纹理对象把粒子渲染成图像。图像总是朝向用户。
GeomParticleRenderer
该渲染器把粒子渲染成完整的3D模型,它需要一个几何体节点。
粒子效果由一些小的图像在相同的外力作用下运动形成。粒子经历一个出生、移动、死亡的过程。粒子系统是动态的,用于实现烟花、泡沫、蒸汽等效果,甚至可以用来模拟一大群气球。
从 本质上讲,任何粒子系统都需要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 | 指向粒子工厂的指针 | 工厂类型 |
粒子工厂(Particle Factories)
粒子工厂有2种类型,Point和ZSpin。在粒子面板上我们虽然可以看到第三种Oriented类型,但这种工厂目前还不可用。2种工厂之间的区别体现在粒子的方向和旋转能力上。
首先,各类型工厂公共的参数有:
变量 | 定义 | 值 |
lifespanBase | 平均寿命(秒) | [0, 正无穷) |
lifespanSpread | 寿命的差异 | [0, 正无穷) |
massBase | 平均粒子群 | [0, 正无穷) |
massSpread | 粒子群的差异 | [0, 正无穷) |
terminalVelocityBase | 平均粒子最终速度 | [0, 正无穷) |
terminalVelocitySpread | 最终速度的差异 | [0, 正无穷) |
ZSpin粒子工厂生产绕Z轴旋转的粒子,Z轴在Panda3D中为垂直轴。它们有一些额外的参数:
变量 | 定义 | 值 |
initialAngle | 起始角度(度) | [0, 360] |
initialAngleSpread | 起始角度的散布 | [0, 360] |
finalAngle | 最终角度(度) | [0, 360] |
fnalAngleSpread | 最终角度的散布 | [0, 360] |
粒子发射器有很多种,根据它们代表的体积空间区分。所有发射器都有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, 正无穷) |
BoxEmitter
变量 | 定义 | 值 |
minBound | 箱体最小的点 | (x, y, z) |
maxBound | 箱体最大的点 | (x, y, z) |
DiscEmitter
变量 | 定义 | 值 |
radius | 圆盘的半径 | [0, 正无穷) |
outerAngle | 圆盘边界上粒子的发射角度 | [0, 360] |
innterAngle | 圆盘中心粒子的发射角度 | [0, 360] |
outerMagnitude | 圆盘边界上粒子发射速度的倍数 | (负无穷, 正无穷) |
innerMagnitude | 圆盘中心粒子发射速度的倍数 | (负无穷, 正无穷) |
cubicLerping | 数量/角度是否为立方插值 | 布尔值 |
PointEmitter
变量 | 定义 | 值 |
location | 外部点的位置 | (x, y, z) |
RectangleEmitter
变量 | 定义 | 值 |
minBound | 定义矩形的2维点 | (x, z) |
maxBound | 定义矩形的2维点 | (x, z) |
RingEmitter
变量 | 定义 | 值 |
radius | 圆盘的半径 | [0, 正无穷) |
angle | 粒子发射角度 | [0, 360] |
SphereSurfaceEmitter
变量 | 定义 | 值 |
radius | 球体的半径 | [0, 正无穷) |
TangentRingEmitter
变量 | 定义 | 值 |
radius | 圆环的半径 | [0, 正无穷) |
粒子渲染器(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(线性、立方) |
BLEND_LIFE: 颜色根据点的寿命从开始向结束插值。
BLEND_VEL: 颜色根据速度/最终速度在开始和结束之间插值。
LineParticleRenderer
该渲染器把粒子渲染成当前位置和最终位置之间的线段。
变量 | 定义 | 值 |
headColor | 头部的颜色 | (r, g, b, a) |
tailColor | 尾端的颜色 | (r, g, b, a) |
该渲染器把粒子渲染成星星或闪光的物体,3条等长的正交轴围成的形状,就像抓子游戏(jacks)里的抓子。当闪光粒子看起来小于一个像素时就会闪光。
变量 | 定义 | 值 |
centerColor | 中心的颜色 | (r, g, b, a) |
edgeColor | 边界的颜色 | (r, g, b, a) |
birthRadius | 初始的闪光半径 | [0, 正无穷) |
deathRadius | 最终的闪光半径 | [0, 正无穷) |
lifeScale | 是否保持出生时的闪光半径 | NO_SCALE、SCALE |
该渲染器使用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) | 布尔值 |
该渲染器把粒子渲染成完整的3D模型,它需要一个几何体节点。
变量 | 定义 | 值 |
geomNode | 一个几何体scene graph节点 | <Node> |
相关文章推荐
- 翻译:Panda3D Manual/V. Programming with Panda/L. Render Effects
- 翻译:Panda3D Manual/V. Programming with Panda/G. Intervals
- 翻译:Panda3D Manual/V. Programming with Panda/N. Pixel and Vertex Shaders
- 翻译:Panda3D Manual/V. Programming with Panda/V. Math Engine
- 翻译:Panda3D Manual/V. Programming with Panda/O. Finite State Machines
- 翻译:Panda3D Manual/V. Programming with Panda/X. Motion Paths
- 翻译:Panda3D Manual/V. Programming with Panda/G. Intervals
- 翻译:Panda3D Manual/V. Programming with Panda/H. Tasks and Event Handling
- 翻译:Panda3D Manual/V. Programming with Panda/Y. Timing
- 翻译:Panda3D Manual/V. Programming with Panda/A. The Scene Graph
- 翻译:Panda3D Manual/V. Programming with Panda/I. Fog and Lighting
- 翻译:Panda3D Manual/V. Programming with Panda/R. Panda Utility Functions
- 翻译:Panda3D Manual/V. Programming with Panda/Z. Networking
- 翻译:Panda3D Manual/V. Programming with Panda/B. Panda Filename Syntax
- 翻译:Panda3D Manual/V. Programming with Panda/J. Text and Image Rendering
- 翻译:Panda3D Manual/V. Programming with Panda/Q. Panda Rendering Process
- 翻译:Panda3D Manual/V. Programming with Panda/C. The Configuration File
- 翻译:Panda3D Manual/V. Programming with Panda/T. Collision Detection
- 翻译:Panda3D Manual/V. Programming with Panda/D. Actors and Characters
- 翻译:Panda3D Manual/V. Programming with Panda/K. DirectGUI