/** a firedemo by Guru */ PImage buffer = createImage( 320, 200, RGB ); PImage buffer2 = createImage( 320, 200, RGB ); PImage textbuffer = createImage( 320, 200, RGB ); PFont fontA; void setup() { background( 0 ); size( 320, 200 ); fontA = loadFont("BitstreamVeraSans-Bold-48.vlw"); PGraphics g = createGraphics(320,200, JAVA2D); g.textFont(fontA, 88); g.text( "FIRE", 50, 190 ); textbuffer.copy( g, 0, 0, 320, 200, 0, 0, 320, 200 ); textFont(fontA, 88); } void draw() { buffer2.loadPixels(); buffer.loadPixels(); loadPixels(); for ( int y = 1; y < 199; y++) { for( int x = 1; x < 319; x++ ) { int c = int(( brightness(buffer2.pixels[ (y+1) * 320 + x - 1 ]) + brightness(buffer2.pixels[ (y+1) * 320 + x ]) + brightness(buffer2.pixels[ (y+1) * 320 + x + 1 ]) + brightness(buffer2.pixels[ (y) * 320 + x - 1 ]) + brightness(buffer2.pixels[ (y) * 320 + x ]) + brightness(buffer2.pixels[ (y) * 320 + x + 1 ]) ) / 6 ); buffer.pixels[ y * 320 + x ] = color( c ); pixels[ y * 320 + x ] = col( c ); } } buffer.updatePixels(); updatePixels(); fill( 255, 0, 0, 50 ); text( "FIRE", 50, 190 ); buffer2.copy( buffer, 0, 0, 320, 200, 0, -1, 319, 200 ); for ( int y = 1; y < 199; y++) { for( int x = 1; x < 319; x++ ) { if ( brightness(textbuffer.get(x, y)) > 100 && brightness(buffer.get(x,y)) > 40 ) { buffer2.set( x, y, color( buffer.get( x, y ) + int(random(1)) )); } } } for( int x= 0; x < 320; x++ ) { buffer2.set( x, 199, color( random( 70 ))); } for( int i = 0; i < 30; i++) { int x = int( random(318)) + 1; buffer2.set( x - 1, 199, color(255)); buffer2.set( x , 199, color(255)); buffer2.set( x + 1, 199, color(255)); } } color col( int bright ) { if ( bright < 100 ) { return color( map( bright, 0, 100, 0, 255), 0, 0 ); } else if ( bright < 200 ) { return color( 255, map( bright, 100, 200, 0, 255 ), 0 ); } else { return color( 255, 255, map( bright, 200, 255, 0, 255 )); } }