Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 4176 in orxonox.OLD for orxonox/trunk/src/lib/graphics


Ignore:
Timestamp:
May 13, 2005, 11:09:20 PM (20 years ago)
Author:
bensch
Message:

orxonox/trunk: merged the particleSystem into the Trunk

Location:
orxonox/trunk/src/lib/graphics/particles
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/lib/graphics/particles/particle_emitter.cc

    r4017 r4176  
    137137            randDir = (this->getAbsDir()*Quaternion(angle + randomAngle *((float)rand()/RAND_MAX -.5), randDir)).apply(this->direction);
    138138            Vector velocityV = randDir.getNormalized()*this->velocity + inheritVelocity;
    139            
    140             system->addParticle(this->getAbsCoor(), velocityV);
     139
     140            // this should spread the Particles evenly. if the Emitter is moved around quickly
     141            Vector equalSpread = this->getVelocity() * random()/RAND_MAX * dt;
     142
     143            system->addParticle(this->getAbsCoor() - equalSpread, velocityV);
    141144          }
    142145      }
  • orxonox/trunk/src/lib/graphics/particles/particle_emitter.h

    r3966 r4176  
    2222
    2323 public:
    24   ParticleEmitter(const Vector& direction, float angle = .5, float emissionRate = 1.0,
    25                   float velocity = 1.0);
     24  ParticleEmitter(const Vector& direction, float angle = .5,
     25                  float emissionRate = 1.0, float velocity = 1.0);
    2626  virtual ~ParticleEmitter(void);
    2727
  • orxonox/trunk/src/lib/graphics/particles/particle_engine.cc

    r3966 r4176  
    228228void ParticleEngine::tick(float dt)
    229229{
    230   // add new Particles to each System connected to an Emitter.
    231   tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
    232   ParticleConnection* tmpConnection = tmpConIt->nextElement();
    233   while(tmpConnection)
    234     {
    235       tmpConnection->emitter->tick(dt, tmpConnection->system);
    236       tmpConnection = tmpConIt->nextElement();
    237     }
    238   delete tmpConIt;
    239  
    240 
    241230  // ticks all the ParticleSystems
    242231  tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
     
    248237    }
    249238  delete tmpIt;
     239
     240  // add new Particles to each System connected to an Emitter.
     241  tIterator<ParticleConnection>* tmpConIt = connectionList->getIterator();
     242  ParticleConnection* tmpConnection = tmpConIt->nextElement();
     243  while(tmpConnection)
     244    {
     245      tmpConnection->emitter->tick(dt, tmpConnection->system);
     246      tmpConnection = tmpConIt->nextElement();
     247    }
     248  delete tmpConIt;
    250249}
    251250
    252251/**
    253252   \brief draws all the systems and their Particles.
    254 */
    255 void ParticleEngine::draw(void)
     253   \param dt the time passed in seconds (since the last Frame)
     254*/
     255void ParticleEngine::draw(float dt)
    256256{
    257257  tIterator<ParticleSystem>* tmpIt = systemList->getIterator();
     
    259259  while(tmpSys)
    260260    {
    261       tmpSys->draw();
     261      tmpSys->draw(dt);
    262262      tmpSys = tmpIt->nextElement();
    263263    }
  • orxonox/trunk/src/lib/graphics/particles/particle_engine.h

    r3966 r4176  
    88
    99#include "base_object.h"
     10#include "particle_system.h"
     11#include "particle_emitter.h"
    1012
    1113// FORWARD DEFINITION
     
    2830
    2931  void tick(float dt);
    30   void draw(void);
     32  void draw(float dt);
    3133
    3234  void addSystem(ParticleSystem* system);
  • orxonox/trunk/src/lib/graphics/particles/particle_system.cc

    r4123 r4176  
    3535{
    3636   this->setClassName ("ParticleSystem");
     37   this->material = NULL;
    3738   this->name = NULL;
    3839   this->maxCount = maxCount;
    3940   this->count = 0;
    40    this->particleType = type;
    4141   this->particles = NULL;
    4242   this->deadList = NULL;
    43    this->setConserve(.8);
    44    this->setLifeSpan(.1);
     43   this->setConserve(1);
     44   this->setLifeSpan(1);
    4545   this->setInheritSpeed(0);
    4646   this->glID = NULL;
    4747   this->setRadius(1.0, 1.0, 0.0);
    48    this->setType(PARTICLE_SPRITE, 1);
     48   this->setType(type, 1);
    4949   ParticleEngine::getInstance()->addSystem(this);
    5050}
     
    5454   \brief standard deconstructor
    5555*/
    56 ParticleSystem::~ParticleSystem() 
     56ParticleSystem::~ParticleSystem()
    5757{
    5858  // delete what has to be deleted here
     
    7474       delete tmpDelPart;
    7575     }
     76
     77   if (this->material)
     78     delete this->material;
    7679}
    7780
     
    240243/**
    241244   \brief draws all the Particles of this System
    242 */
    243 void ParticleSystem::draw(void)
    244 {
     245   \param the time passed in seconds (since the last draw)
     246*/
     247void ParticleSystem::draw(float dt)
     248{
     249  glPushAttrib(GL_ENABLE_BIT);
    245250  //  material->select();
    246 
    247 
    248   glMatrixMode(GL_MODELVIEW);
    249   //  glDisable(GL_LIGHTING);
    250   material->select();
    251   glDisable(GL_DEPTH_TEST);
    252  Particle* drawPart = particles;
    253   if (likely(drawPart != NULL))
     251  Particle* drawPart = particles;
     252
     253  switch (this->particleType)
    254254    {
    255       //draw in DOT mode
    256       //      glBegin(GL_POINTS);
     255    case PARTICLE_SPRITE:
     256      glMatrixMode(GL_MODELVIEW);
     257      //  glDisable(GL_LIGHTING);
     258      material->select();
     259      glDisable(GL_DEPTH_TEST);
    257260      while (likely(drawPart != NULL))
    258261        {
     
    267270        }
    268271      //      glEnd();
     272     
     273      //  glEnable(GL_LIGHTING);
     274     
     275      glEnable(GL_DEPTH_TEST);
     276      break;
     277    default:
     278
     279    case PARTICLE_SPARK:
     280      glEnable(GL_LINE_SMOOTH);
     281      glBegin(GL_LINES);
     282      while (likely(drawPart != NULL))
     283        {
     284          glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
     285          glVertex3f(drawPart->position.x - drawPart->velocity.x,
     286                     drawPart->position.y - drawPart->velocity.y,
     287                     drawPart->position.z - drawPart->velocity.z);
     288          drawPart = drawPart->next;
     289        }
     290      glEnd();
     291      break;
     292     
     293    case PARTICLE_DOT:
     294      glBegin(GL_POINTS);
     295      while (likely(drawPart != NULL))
     296        {
     297          glLineWidth(drawPart->radius);
     298
     299          glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
     300          drawPart = drawPart->next;
     301        }
     302      glEnd();
     303      break;
    269304    }
    270   //  glEnable(GL_LIGHTING);
    271   glEnable(GL_DEPTH_TEST);
     305  glPopAttrib();
    272306}
    273307
     
    291325            }
    292326          else
    293             this->particles = new Particle;
     327            {
     328              PRINTF(5)("Generating new Particle\n");
     329              this->particles = new Particle;
     330            }
    294331          this->particles->next = NULL;
    295332        }
     
    304341            }
    305342          else
    306             tmpPart = new Particle;
     343            {
     344              PRINTF(5)("Generating new Particle\n");
     345              tmpPart = new Particle;
     346            }
    307347          tmpPart->next = this->particles;
    308348          this->particles = tmpPart;
  • orxonox/trunk/src/lib/graphics/particles/particle_system.h

    r4123 r4176  
    5454
    5555 public:
    56   ParticleSystem(unsigned int maxCount = PARTICLE_DEFAULT_MAX_COUNT, PARTICLE_TYPE type = PARTICLE_DEFAULT_TYPE);
     56  ParticleSystem(unsigned int maxCount = PARTICLE_DEFAULT_MAX_COUNT,
     57                 PARTICLE_TYPE type = PARTICLE_DEFAULT_TYPE);
    5758  virtual ~ParticleSystem();
    5859  void setName(const char* name);
     
    6364  void setInheritSpeed(float value);
    6465  void setLifeSpan(float lifeSpan, float randomLifeSpan = 0.0);
    65   void setRadius(float startRadius, float endRadius, float randomStartRadius = 0.0, float randomEndRadius = 0.0);
     66  void setRadius(float startRadius, float endRadius,
     67                 float randomStartRadius = 0.0, float randomEndRadius = 0.0);
    6668  void setConserve(float conserve);
    6769  void setMass(float mass, float randomMass);
    6870
    6971  void tick(float dt);
    70   void draw(void);
     72  void draw(float dt);
    7173
    7274  void debug(void);
Note: See TracChangeset for help on using the changeset viewer.