00001 #include "AnimatedPerlinTexture.h" 00002 00003 AnimatedPerlinTexture::AnimatedPerlinTexture() { 00004 animation_step = 1.0f; 00005 elapsed_time = 0.0f; 00006 _init_textures(); 00007 } 00008 00009 AnimatedPerlinTexture::AnimatedPerlinTexture(double as) { 00010 animation_step = as; 00011 elapsed_time = 0.0f; 00012 _init_textures(); 00013 } 00014 00015 void AnimatedPerlinTexture::_init_textures() { 00016 next = new PerlinTexture(); 00017 last = new PerlinTexture(); 00018 curr = new PerlinTexture(); 00019 00020 next->refresh(); 00021 last->refresh(); 00022 } 00023 00024 AnimatedPerlinTexture::~AnimatedPerlinTexture() { 00025 delete next; 00026 delete last; 00027 delete curr; 00028 } 00029 00030 void AnimatedPerlinTexture::animate(double dt) { 00031 double p1, p2; 00032 if (dt <= 0) 00033 return; 00034 elapsed_time += dt; 00035 if (elapsed_time >= animation_step) { 00036 elapsed_time -= animation_step; 00037 delete last; 00038 last = next; 00039 next = new PerlinTexture(); 00040 next->refresh(); 00041 } 00042 p1 = animation_step - elapsed_time; 00043 p2 = elapsed_time; 00044 00045 unsigned char* a; 00046 unsigned char* b; 00047 unsigned char* c; 00048 a = next->get_scaled(0,0); 00049 b = curr->get_scaled(0,0); 00050 c = last->get_scaled(0,0); 00051 for (int i = 0; i < PERLINTEXTURE_BASE_SQUARE; i++) { 00052 *b = (unsigned char) (*c) * p1 + (*a) * p2; 00053 ++a; 00054 ++b; 00055 ++c; 00056 } 00057 }