Particle.cpp
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:2k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. //
  2. // a64ki
  3. // Copyright (c) 2002 Henrik Carlgren
  4. // http://ziruz.cjb.net
  5. // ziruz@hotpop.com
  6. //
  7. //
  8. // INCLUDE FILES
  9. //
  10. #include "particle.h"
  11. #include <stdlib.h>
  12. #include <cmath>
  13. //
  14. // CLASS: PARTICLE
  15. // METHOD: birth
  16. //
  17. void PARTICLE::birth(void)
  18. {
  19. currentAge = 0;
  20. maximumAge = rand() % (ageRangeMaximum - ageRangeMinimum + 1) + ageRangeMinimum;
  21. position = *targetPosition;
  22. position.x = position.x + (float)(rand() % 100 - 50)*0.002f;
  23. position.y = position.y + (float)(rand() % 100 - 50)*0.002f;
  24. position.z = position.z + (float)(rand() % 100 - 50)*0.002f;
  25. velocity = *targetVelocity;
  26. float angle = (float)(rand()%36000) / 100.0f;
  27. velocity.x = velocity.x + 0.0005f * (float)cos(angle);
  28. velocity.y = velocity.y + 0.0005f * (float)sin(angle);
  29. velocity.z = velocity.z + 0.0005f * (float)cos(angle);
  30. impulse = *targetImpulse;
  31. impulse.x += (float)(rand()%13-6)/4444.0f;
  32. impulse.y += (float)(rand()%13-6)/4444.0f;
  33. impulse.z += (float)(rand()%13-6)/4444.0f;
  34. }
  35. //
  36. // CLASS: PARTICLE
  37. // METHOD: update
  38. //
  39. void PARTICLE::update(long double delta)
  40. {
  41. currentAge += delta;
  42. if(currentAge > maximumAge)
  43. birth();
  44. position.x += (velocity.x + impulse.x) * (float)delta;
  45. position.y += (velocity.y + impulse.y) * (float)delta;
  46. position.z += (velocity.z + impulse.z) * (float)delta;
  47. impulse.x -= (float)delta*(impulse.x/512);
  48. impulse.y -= (float)delta*(impulse.y/512);
  49. impulse.z -= (float)delta*(impulse.z/512);
  50. }