初步了解Panda3d粒子系统

运行panda3d示例Tut-Particle-Panel.py;出现一个基本粒子系统如下;

初步了解Panda3d粒子系统_第1张图片

同时出现粒子系统面板如下;

初步了解Panda3d粒子系统_第2张图片 

    粒子系统的编程原理应该是通过指定粒子的发射位置、数量、粒子尺寸、颜色等参数,然后引擎就把它做出来;

    调整一下面板参数,基本没发现效果;

研究了一下,它的粒子系统配置是*.ptf文件;载入不同的ptf文件,看一下效果;

初步了解Panda3d粒子系统_第3张图片 

初步了解Panda3d粒子系统_第4张图片 

    等等;

打开一个ptf文件看一下; 是纯文本,可手动编辑;一个示例如下;

self.reset()
self.setPos(0.000, 0.000, 0.000)
self.setHpr(0.000, 0.000, 0.000)
self.setScale(1.000, 1.000, 1.000)
p0 = Particles.Particles('particles-1')
# Particles parameters
p0.setFactory("PointParticleFactory")
p0.setRenderer("PointParticleRenderer")
p0.setEmitter("DiscEmitter")
p0.setPoolSize(10000)
p0.setBirthRate(0.0200)
p0.setLitterSize(300)
p0.setLitterSpread(100)
p0.setSystemLifespan(0.0000)
p0.setLocalVelocityFlag(1)
p0.setSystemGrowsOlderFlag(0)
# Factory parameters
p0.factory.setLifespanBase(0.5000)
p0.factory.setLifespanSpread(0.2500)
p0.factory.setMassBase(2.0000)
p0.factory.setMassSpread(0.0100)
p0.factory.setTerminalVelocityBase(400.0000)
p0.factory.setTerminalVelocitySpread(0.0000)
# Point factory parameters
# Renderer parameters
p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
p0.renderer.setUserAlpha(0.45)
# Point parameters
p0.renderer.setPointSize(3.00)
p0.renderer.setStartColor(Vec4(0.25, 0.90, 1.00, 1.00))
p0.renderer.setEndColor(Vec4(1.00, 1.00, 1.00, 1.00))
p0.renderer.setBlendType(PointParticleRenderer.PPONECOLOR)
p0.renderer.setBlendMethod(BaseParticleRenderer.PPNOBLEND)
# Emitter parameters
p0.emitter.setEmissionType(BaseParticleEmitter.ETCUSTOM)
p0.emitter.setAmplitude(1.0000)
p0.emitter.setAmplitudeSpread(0.0000)
p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 4.0000))
p0.emitter.setExplicitLaunchVector(Vec3(1.0000, 0.0000, 0.0000))
p0.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000))
# Disc parameters
p0.emitter.setRadius(0.0500)
p0.emitter.setOuterAngle(356.1859)
p0.emitter.setInnerAngle(0.0000)
p0.emitter.setOuterMagnitude(2.0000)
p0.emitter.setInnerMagnitude(1.0000)
p0.emitter.setCubicLerping(0)
self.addParticles(p0)
f0 = ForceGroup.ForceGroup('gravity')
# Force parameters
force0 = LinearVectorForce(Vec3(0.0000, 0.0000, -1.0000), 25.0000, 1)
force0.setActive(1)
f0.addForce(force0)
force1 = LinearJitterForce(3.0000, 1)
force1.setActive(1)
f0.addForce(force1)
self.addForceGroup(f0)

显示粒子系统面板的python代码如下;

import sys
import direct.directbase.DirectStart

base.startTk()

from direct.tkpanels.ParticlePanel import ParticlePanel

pp = ParticlePanel()             # Create the panel
base.disableMouse()              # Disable camera control to place it
camera.setY(-10)                 # Place the camera
base.setBackgroundColor(0, 0, 0) # Most particle systems show up better on black backgrounds
run()   

粒子系统一般是叠加在模型上做一些效果,例如模拟建筑着火之类;

BaseParticleRenderer是粒子系统的基类;

粒子系统的类别包括:几何粒子,线段粒子,点粒子,烟火粒子,精灵;

classBaseParticleRenderer
Bases:

Bases: ReferenceCount

Pure virtual particle renderer base class

    这个类是纯虚类;编程时要用派生的具体类;

你可能感兴趣的:(图形学和3D,粒子系统)