Files
processing4/java/examples/Topics/Effects/Plasma/Plasma.pde
benfry eb64b2d4fc
2011-01-26 19:22:19 +00:00

61 lines
1.5 KiB
Plaintext

/**
* Plasma Demo Effect
* by luis2048.
*
* Cycles of changing colours warped to give an illusion
* of liquid, organic movement.Colors are the sum of sine
* functions and various formulas. Based on formula by Robert Klep.
*/
int pixelSize=2;
PGraphics pg;
void setup(){
size(640, 360);
// Create buffered image for plasma effect
pg = createGraphics(160, 90, P2D);
colorMode(HSB);
noSmooth();
}
void draw()
{
float xc = 25;
// Enable this to control the speed of animation regardless of CPU power
// int timeDisplacement = millis()/30;
// This runs plasma as fast as your computer can handle
int timeDisplacement = frameCount;
// No need to do this math for every pixel
float calculation1 = sin( radians(timeDisplacement * 0.61655617));
float calculation2 = sin( radians(timeDisplacement * -3.6352262));
// Output into a buffered image for reuse
pg.beginDraw();
pg.loadPixels();
// Plasma algorithm
for (int x = 0; x < pg.width; x++, xc += pixelSize)
{
float yc = 25;
float s1 = 128 + 128 * sin(radians(xc) * calculation1 );
for (int y = 0; y < pg.height; y++, yc += pixelSize)
{
float s2 = 128 + 128 * sin(radians(yc) * calculation2 );
float s3 = 128 + 128 * sin(radians((xc + yc + timeDisplacement * 5) / 2));
float s = (s1+ s2 + s3) / 3;
pg.pixels[x+y*pg.width] = color(s, 255 - s / 2.0, 255);
}
}
pg.updatePixels();
pg.endDraw();
// display the results
image(pg,0,0,width,height);
}