Panda3D
 All Classes Functions Variables Enumerations
pointParticleRenderer.h
00001 // Filename: pointParticleRenderer.h
00002 // Created by:  charles (20Jun00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #ifndef POINTPARTICLERENDERER_H
00016 #define POINTPARTICLERENDERER_H
00017 
00018 #include "baseParticleRenderer.h"
00019 #include "baseParticle.h"
00020 #include "renderModeAttrib.h"
00021 #include "pointerTo.h"
00022 #include "pointerToArray.h"
00023 #include "luse.h"
00024 #include "geom.h"
00025 #include "geomVertexData.h"
00026 #include "geomPoints.h"
00027 #include "pStatCollector.h"
00028 
00029 ////////////////////////////////////////////////////////////////////
00030 //       Class : PointParticleRenderer
00031 // Description : Simple point/point particle renderer.  Does NOT
00032 //               handle billboards- use BillboardParticleRenderer
00033 //               for that.
00034 ////////////////////////////////////////////////////////////////////
00035 
00036 class EXPCL_PANDAPHYSICS PointParticleRenderer : public BaseParticleRenderer {
00037 PUBLISHED:
00038   enum PointParticleBlendType {
00039     PP_ONE_COLOR,
00040     PP_BLEND_LIFE,
00041     PP_BLEND_VEL
00042   };
00043 
00044   PointParticleRenderer(const PointParticleRenderer& copy);
00045   PointParticleRenderer(ParticleRendererAlphaMode ad = PR_ALPHA_NONE,
00046                         PN_stdfloat point_size = 1.0f,
00047                         PointParticleBlendType bt = PP_ONE_COLOR,
00048                         ParticleRendererBlendMethod bm = PP_NO_BLEND,
00049                         const LColor& sc = LColor(1.0f, 1.0f, 1.0f, 1.0f),
00050                         const LColor& ec = LColor(1.0f, 1.0f, 1.0f, 1.0f));
00051 
00052   virtual ~PointParticleRenderer();
00053 
00054 public:
00055   virtual BaseParticleRenderer *make_copy();
00056 
00057 PUBLISHED:
00058   INLINE void set_point_size(PN_stdfloat point_size);
00059   INLINE void set_start_color(const LColor& sc);
00060   INLINE void set_end_color(const LColor& ec);
00061   INLINE void set_blend_type(PointParticleBlendType bt);
00062   INLINE void set_blend_method(ParticleRendererBlendMethod bm);
00063 
00064   INLINE PN_stdfloat get_point_size() const;
00065   INLINE const LColor& get_start_color() const;
00066   INLINE const LColor& get_end_color() const;
00067   INLINE PointParticleBlendType get_blend_type() const;
00068   INLINE ParticleRendererBlendMethod get_blend_method() const;
00069 
00070   virtual void output(ostream &out) const;
00071   virtual void write(ostream &out, int indent_level = 0) const;
00072 
00073 private:
00074   LColor _start_color;
00075   LColor _end_color;
00076   PN_stdfloat _point_size;
00077   CPT(RenderAttrib) _thick;
00078 
00079   PT(Geom) _point_primitive;
00080   PT(GeomPoints) _points;
00081   PT(GeomVertexData) _vdata;
00082 
00083   int _max_pool_size;
00084 
00085   PointParticleBlendType _blend_type;
00086   ParticleRendererBlendMethod _blend_method;
00087 
00088   LPoint3 _aabb_min;
00089   LPoint3 _aabb_max;
00090 
00091   LColor create_color(const BaseParticle *p);
00092 
00093   virtual void birth_particle(int index);
00094   virtual void kill_particle(int index);
00095   virtual void init_geoms();
00096   virtual void render(pvector< PT(PhysicsObject) >& po_vector,
00097                       int ttl_particles);
00098   virtual void resize_pool(int new_size);
00099 
00100   static PStatCollector _render_collector;
00101 };
00102 
00103 #include "pointParticleRenderer.I"
00104 
00105 #endif // POINTPARTICLERENDERER_H
 All Classes Functions Variables Enumerations