Beispiel #1
0
static void initParticle(graphics_ParticleSystem const *ps, graphics_Particle *p, float t) {
  p->origin[0] = p->position[0] = lerp(ps->prevPosition[0], ps->position[0], t);
  p->origin[1] = p->position[1] = lerp(ps->prevPosition[1], ps->position[1], t);

  if(ps->particleLifeMin == ps->particleLifeMax) {
    p->life = ps->particleLifeMin;
  } else {
    p->life = (float) math_RandomGenerator_random2(&moduleData.rng, ps->particleLifeMin, ps->particleLifeMax);
  }
  p->lifetime = p->life;

  switch(ps->areaSpreadDistribution) {
  case graphics_AreaSpreadDistribution_uniform:
    p->position[0] += math_RandomGenerator_random2(&moduleData.rng, -1.0, 1.0) * ps->areaSpread[0];
    p->position[1] += math_RandomGenerator_random2(&moduleData.rng, -1.0, 1.0) * ps->areaSpread[1];
    break;
  case graphics_AreaSpreadDistribution_normal:
    p->position[0] += math_RandomGenerator_randomNormal(&moduleData.rng, ps->areaSpread[0]);
    p->position[1] += math_RandomGenerator_randomNormal(&moduleData.rng, ps->areaSpread[1]);
    break;
  default:
    break;
  }

  float direction = ps->direction + math_RandomGenerator_random2(&moduleData.rng, -1.0, 1.0) * ps->spread;

  float speed = math_RandomGenerator_random2(&moduleData.rng, ps->speedMin, ps->speedMax);
  p->velocity[0] = cos(direction) * speed;
  p->velocity[1] = sin(direction) * speed;

  p->linearAcceleration[0] = math_RandomGenerator_random2(&moduleData.rng, ps->linearAccelerationMin[0], ps->linearAccelerationMax[0]);
  p->linearAcceleration[1] = math_RandomGenerator_random2(&moduleData.rng, ps->linearAccelerationMin[1], ps->linearAccelerationMax[1]);

  p->radialAcceleration = math_RandomGenerator_random2(&moduleData.rng, ps->radialAccelerationMin, ps->radialAccelerationMax);

  p->tangentialAcceleration = math_RandomGenerator_random2(&moduleData.rng, ps->tangentialAccelerationMin, ps->tangentialAccelerationMax);

  p->linearDamping = math_RandomGenerator_random2(&moduleData.rng, ps->linearDampingMin, ps->linearDampingMax);

  p->sizeOffset = math_RandomGenerator_random(&moduleData.rng);
  p->sizeIntervalSize = (1.0 - math_RandomGenerator_random2(&moduleData.rng, 0.0, ps->sizeVariation)) - p->sizeOffset;
  p->size = ps->sizes[(size_t)(p->sizeOffset - 0.5f) * (ps->sizeCount -1 )];

  p->spinStart = calculateVariation(ps->spinStart, ps->spinEnd,   ps->spinVariation);
  p->spinEnd   = calculateVariation(ps->spinEnd,   ps->spinStart, ps->spinVariation);
  p->rotation  = math_RandomGenerator_random2(&moduleData.rng, ps->rotationMin, ps->rotationMax);

  p->angle = p->rotation;
  if(ps->relativeRotation) {
    p->angle += atan2(p->velocity[1], p->velocity[0]);
  }

  p->color = ps->colors[0];
  p->quadIndex = 0;

}
void ThermalEngine::updateThermal(ofImage heatImg){

    images.push_back(heatImg);
    
    if(images.size() > 2)
        calculateVariation();
    
    
    if(images.size() > BUFFER_SIZE)
        images.erase(images.begin());
}