• 初步了解Panda3d粒子系统


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

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

     

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

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

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

     

     

        等等;

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

    1. self.reset()
    2. self.setPos(0.000, 0.000, 0.000)
    3. self.setHpr(0.000, 0.000, 0.000)
    4. self.setScale(1.000, 1.000, 1.000)
    5. p0 = Particles.Particles('particles-1')
    6. # Particles parameters
    7. p0.setFactory("PointParticleFactory")
    8. p0.setRenderer("PointParticleRenderer")
    9. p0.setEmitter("DiscEmitter")
    10. p0.setPoolSize(10000)
    11. p0.setBirthRate(0.0200)
    12. p0.setLitterSize(300)
    13. p0.setLitterSpread(100)
    14. p0.setSystemLifespan(0.0000)
    15. p0.setLocalVelocityFlag(1)
    16. p0.setSystemGrowsOlderFlag(0)
    17. # Factory parameters
    18. p0.factory.setLifespanBase(0.5000)
    19. p0.factory.setLifespanSpread(0.2500)
    20. p0.factory.setMassBase(2.0000)
    21. p0.factory.setMassSpread(0.0100)
    22. p0.factory.setTerminalVelocityBase(400.0000)
    23. p0.factory.setTerminalVelocitySpread(0.0000)
    24. # Point factory parameters
    25. # Renderer parameters
    26. p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
    27. p0.renderer.setUserAlpha(0.45)
    28. # Point parameters
    29. p0.renderer.setPointSize(3.00)
    30. p0.renderer.setStartColor(Vec4(0.25, 0.90, 1.00, 1.00))
    31. p0.renderer.setEndColor(Vec4(1.00, 1.00, 1.00, 1.00))
    32. p0.renderer.setBlendType(PointParticleRenderer.PPONECOLOR)
    33. p0.renderer.setBlendMethod(BaseParticleRenderer.PPNOBLEND)
    34. # Emitter parameters
    35. p0.emitter.setEmissionType(BaseParticleEmitter.ETCUSTOM)
    36. p0.emitter.setAmplitude(1.0000)
    37. p0.emitter.setAmplitudeSpread(0.0000)
    38. p0.emitter.setOffsetForce(Vec3(0.0000, 0.0000, 4.0000))
    39. p0.emitter.setExplicitLaunchVector(Vec3(1.0000, 0.0000, 0.0000))
    40. p0.emitter.setRadiateOrigin(Point3(0.0000, 0.0000, 0.0000))
    41. # Disc parameters
    42. p0.emitter.setRadius(0.0500)
    43. p0.emitter.setOuterAngle(356.1859)
    44. p0.emitter.setInnerAngle(0.0000)
    45. p0.emitter.setOuterMagnitude(2.0000)
    46. p0.emitter.setInnerMagnitude(1.0000)
    47. p0.emitter.setCubicLerping(0)
    48. self.addParticles(p0)
    49. f0 = ForceGroup.ForceGroup('gravity')
    50. # Force parameters
    51. force0 = LinearVectorForce(Vec3(0.0000, 0.0000, -1.0000), 25.0000, 1)
    52. force0.setActive(1)
    53. f0.addForce(force0)
    54. force1 = LinearJitterForce(3.0000, 1)
    55. force1.setActive(1)
    56. f0.addForce(force1)
    57. self.addForceGroup(f0)

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

    1. import sys
    2. import direct.directbase.DirectStart
    3. base.startTk()
    4. from direct.tkpanels.ParticlePanel import ParticlePanel
    5. pp = ParticlePanel() # Create the panel
    6. base.disableMouse() # Disable camera control to place it
    7. camera.setY(-10) # Place the camera
    8. base.setBackgroundColor(0, 0, 0) # Most particle systems show up better on black backgrounds
    9. run()

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

    BaseParticleRenderer是粒子系统的基类;

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

    classBaseParticleRenderer
    Bases:

    Bases: ReferenceCount

    Pure virtual particle renderer base class

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

  • 相关阅读:
    JavaScript -- 多种数组深拷贝和浅拷贝的方法的总结
    C++面向对象三大特性之一---->继承详解
    JAVA毕业设计web大学生宿舍管理系统计算机源码+lw文档+系统+调试部署+数据库
    项目中记住账号后选中账号input框背景色被改变问题记录
    详讲!!红黑树(最优二叉树)
    应用软件安全编程--06预防 XML 外部实体攻击
    ESP32 AT指令连接AWS亚马逊云
    CISC和RISC的比较
    经验模态分解(Empirical Mode Decomposition,EMD)(附代码)
    php+html+js+ajax实现文件上传
  • 原文地址:https://blog.csdn.net/bcbobo21cn/article/details/125963502