Paul-TextRain
Text Rain clone à la openFrameworks:
The significant lines of code for Text Rain are:
void app::createLetter() { letter *l; // Index in textStr from which to take this letter int lPos; // Find first open position in text for(int i=0; ix = ofRandom(0.0, (float) screenWidth); lPos = l->x / ((float) screenWidth) * ((float) textStrLen); if(lPos < 0) lPos = 0; if(lPos >= textStrLen) lPos = textStrLen - 1; l->c = textStr[lPos]; l->y = 0; l->vel = 0.5; text[i] = l; break; } } } void app::destLetter(int i) { free(text[i]); text[i] = (letter *) 0; } void app::setup(){ camWidth = 320; camHeight = 240; pixelMax = 3*camWidth*camHeight; vidGrabber.setVerbose(true); vidGrabber.initGrabber(camWidth,camHeight); textStrLen = strlen(textStr); // Create text textMax = 1000; text = new letter* [textMax]; for(int i=0; i y > yMax) { destLetter(i); } else { // Move this letter down at its own speed l->y += l->vel; // Move this letter up as long as it is on an obstacle for(;;) { pixel = 3 * ( ((int)l->y)*camWidth + ((int)l->x) ); if(pixel >= 0 && pixel < pixelMax && img[pixel] + img[pixel+1] + img[pixel+2] < obShade) { l->y -= 1.0; } else { break; } } } } } // Create a new letter every 60 frames if( !(ofGetFrameNum()%60) ) { createLetter(); } } void app::draw(){ letter *l; char str[2] = "a"; ofSetColor(0xffffff); vidGrabber.draw(0,0); ofSetColor(255,255,255); // Draw all letters for(int i=0; i c; ofDrawBitmapString(str, (int) l->x, (int) l->y); } } }
Comments Off on Paul-TextRain