Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

panda/src/testbed/test_recparticles.cxx

Go to the documentation of this file.
00001 // Filename: test_recparticles.cxx
00002 // Created by:  
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
00008 //
00009 // All use of this software is subject to the terms of the Panda 3d
00010 // Software license.  You should have received a copy of this license
00011 // along with this source code; you will also find a current copy of
00012 // the license at http://www.panda3d.org/license.txt .
00013 //
00014 // To contact the maintainers of this program write to
00015 // panda3d@yahoogroups.com .
00016 //
00017 ////////////////////////////////////////////////////////////////////
00018 
00019 #include <framework.h>
00020 
00021 #include <eventHandler.h>
00022 #include <chancfg.h>
00023 #include <string>
00024 #include <renderModeTransition.h>
00025 #include <colorTransition.h>
00026 #include <cullFaceTransition.h>
00027 #include <depthTestTransition.h>
00028 #include <depthWriteTransition.h>
00029 #include <textureTransition.h>
00030 #include <lightTransition.h>
00031 #include <materialTransition.h>
00032 #include <transformTransition.h>
00033 #include <get_rel_pos.h>
00034 #include <boundingSphere.h>
00035 #include <geomSphere.h>
00036 #include <geomNode.h>
00037 #include <notify.h>
00038 #include <directionalLight.h>
00039 #include <renderRelation.h>
00040 #include <camera.h>
00041 #include <frustum.h>
00042 #include <orthoProjection.h>
00043 #include <perspectiveProjection.h>
00044 #include <textNode.h>
00045 #include <physicsManager.h>
00046 #include <particleSystem.h>
00047 #include <emitters.h>
00048 #include <forces.h>
00049 #include <sparkleParticleRenderer.h>
00050 #include <pointParticleRenderer.h>
00051 #include <spriteParticleRenderer.h>
00052 #include <pointParticleFactory.h>
00053 #include <particleSystemManager.h>
00054 #include <clockObject.h>
00055 #include <nodePath.h>
00056 #include <memoryUsage.h>
00057 #include <texture.h>
00058 #include <texturePool.h>
00059 
00060 // physics.  particle systems.
00061 
00062 PhysicsManager physics_manager;
00063 ParticleSystemManager ps_manager;
00064 
00065 static void
00066 event_csn_update(CPT_Event) {
00067   float dt = ClockObject::get_global_clock()->get_dt();
00068 
00069   physics_manager.do_physics(dt);
00070   ps_manager.do_particles(dt);
00071 }
00072 
00073 PT(ParticleSystem) explosion_system = new ParticleSystem(128);
00074 PT(PointParticleFactory) explosion_factory = new PointParticleFactory;
00075 PT(SpriteParticleRenderer) explosion_renderer = new SpriteParticleRenderer;
00076 PT(SphereSurfaceEmitter) explosion_emitter = new SphereSurfaceEmitter;
00077 
00078 PT(ParticleSystem) fireworks_system = new ParticleSystem(32);
00079 PT(PointParticleFactory) fireworks_factory = new PointParticleFactory;
00080 PT(PointParticleRenderer) fireworks_renderer = new PointParticleRenderer;
00081 PT(LineEmitter) fireworks_emitter = new LineEmitter;
00082 PT(Texture) fireworks_texture;
00083 
00084 static void
00085 event_add_particles(CPT_Event) {
00086   // set up the base system
00087   fireworks_factory->set_lifespan_base(1.5f);
00088   fireworks_factory->set_lifespan_delta(0.5f);
00089   fireworks_emitter->set_endpoints(LPoint3f(-2.0f, 0.0f, 0.0f),
00090                                    LPoint3f(2.0f, 0.0f, 0.0f));
00091   fireworks_emitter->set_launch_vec(LVector3f(0.0f, 0.0f, 1.0f));
00092   fireworks_renderer->set_point_size(4.0f);
00093   fireworks_renderer->set_color1(Colorf(1, 1, 1, 1));
00094   fireworks_renderer->set_color2(Colorf(1, 0, 0, 1));
00095   fireworks_renderer->set_blend_type(PP_BLEND_LIFE);
00096   fireworks_renderer->set_blend_method(PP_BLEND_LINEAR);
00097   fireworks_renderer->set_alpha_decay(PR_ALPHA_OUT);
00098   fireworks_system->set_birth_rate(0.25f);
00099   fireworks_system->set_litter_size(1);
00100   fireworks_system->set_birth_node(render);
00101   fireworks_system->set_emitter(fireworks_emitter);
00102   fireworks_system->set_renderer(fireworks_renderer);
00103   fireworks_system->set_factory(fireworks_factory);
00104   fireworks_system->set_render_parent(render);
00105   fireworks_system->set_spawn_on_death_flag(true);
00106   fireworks_system->set_spawn_render_node(render);
00107 
00108   // set up the explosion system
00109   explosion_factory->set_lifespan_base(1.0f);
00110   explosion_factory->set_lifespan_delta(0.0f);
00111   explosion_emitter->set_radius(0.1f);
00112   explosion_emitter->set_amplitude(2.0f);
00113   explosion_emitter->set_offset_force(LVector3f(2.0f, 0.0f, 2.0f));
00114   explosion_renderer->set_texture(fireworks_texture);
00115   explosion_renderer->set_alpha_decay(PR_ALPHA_OUT);
00116   explosion_renderer->set_color(Colorf(1, 0, 0, 1));
00117   explosion_system->set_birth_rate(5.0f);
00118   explosion_system->set_litter_size(64);
00119   explosion_system->set_template_system_flag(true);
00120   explosion_system->set_system_grows_older_flag(true);
00121   explosion_system->set_system_lifespan(1.0f);
00122   explosion_system->set_emitter(explosion_emitter);
00123   explosion_system->set_renderer(explosion_renderer);
00124   explosion_system->set_factory(explosion_factory);
00125 
00126   fireworks_system->add_spawn_template(explosion_system);
00127 
00128   //  fireworks_system->add_force(new VectorForce(0, 0, -9.8f));
00129 
00130   /*
00131   particle_system->add_spawn_template(explosion_system);
00132   particle_system->add_spawn_template(explosion_system2);
00133   particle_system->add_spawn_template(explosion_system3);
00134 
00135   particle_system->set_spawn_on_death_flag(true);
00136   particle_system->set_birth_node(render);
00137   particle_system->set_render_parent(render);
00138   particle_system->set_spawn_render_node(render);
00139   */
00140 
00141   ps_manager.attach_particlesystem(fireworks_system);
00142   physics_manager.attach_physical(fireworks_system);
00143 
00144   nout << "Added particles." << endl;
00145   event_handler.add_hook("NewFrame", event_csn_update);
00146 }
00147 
00148 void demo_keys(EventHandler&) {
00149   event_handler.add_hook("p", event_add_particles);
00150 }
00151 
00152 int main(int argc, char *argv[]) {
00153   fireworks_texture = TexturePool::load_texture("firework.rgba");
00154 
00155   define_keys = &demo_keys;
00156   return framework_main(argc, argv);
00157 }
00158 
00159 
00160 
00161 
00162 
00163 

Generated on Fri May 2 00:44:12 2003 for Panda by doxygen1.3