python
from panda3d.core import PointParticleFactory, LineParticleRenderer, SphereSurfaceEmitter, PointEmitter, ParticleSystem, ForceGroup
particle_system = ParticleSystem()
particle_renderer = LineParticleRenderer()
particle_system.addRenderer(particle_renderer)
particle_factory = PointParticleFactory()
particle_system.addFactory(particle_factory)
emitter = SphereSurfaceEmitter()
emitter.setRadius(1.0)
particle_system.addEmitter(emitter)
force_group = ForceGroup()
particle_system.addForceGroup(force_group)
particle_factory.setLifespanBase(2.0)
particle_factory.setLifespanSpread(0.5)
particle_factory.setMassBase(1.0)
particle_factory.setMassSpread(0.2)
particle_factory.setTerminalVelocityBase(400.0)
particle_factory.setTerminalVelocitySpread(50.0)
particle_renderer.setHeadColor(Vec4(1.0, 0.5, 0.3, 1.0))
particle_renderer.setTailColor(Vec4(1.0, 0.2, 0.1, 0.0))
particle_renderer.setLineScaleFactor(4.0)
particle_node = render.attachNewNode(particle_system)
glsl
#version 330
uniform mat4 p3d_ModelViewProjectionMatrix;
in vec4 p3d_Vertex;
in vec2 p3d_MultiTexCoord0;
out vec2 texcoord;
void main()
{
gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex;
texcoord = p3d_MultiTexCoord0;
}
glsl
#version 330
uniform sampler2D p3d_Texture0;
in vec2 texcoord;
out vec4 fragColor;
void main()
{
vec4 texColor = texture(p3d_Texture0, texcoord);
fragColor = texColor * vec4(1.0, 0.8, 0.4, 1.0);
}
python
from panda3d.core import Shader
vertex_shader = Shader.load(Shader.SL_GLSL, "vertex_shader.glsl")
pixel_shader = Shader.load(Shader.SL_GLSL, "pixel_shader.glsl")
model = loader.loadModel("my_model.egg")
model.setShader(vertex_shader)
model.setShaderInput("p3d_Texture0", my_texture)
model.setShader(pixel_shader)