mirror of
https://github.com/processing/processing4.git
synced 2026-02-02 13:21:07 +01:00
61 lines
1.5 KiB
Plaintext
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);
|
|
|
|
}
|
|
|