49 lines
1.0 KiB
Plaintext
49 lines
1.0 KiB
Plaintext
/**
|
|
Plasmas with Palette Looping
|
|
https://lodev.org/cgtutor/plasma.html#Plasmas_with_Palette_Looping_
|
|
*/
|
|
|
|
int pal[] = new int[128];
|
|
int[] buffer;
|
|
float r = 42, g = 84, b = 126;
|
|
boolean rd, gd, bd;
|
|
|
|
void setup() {
|
|
size(600, 600);
|
|
frameRate(25);
|
|
buffer = new int[width*height];
|
|
for (int x = 0; x < width; x++) {
|
|
for (int y = 0; y < height; y++) {
|
|
buffer[x+y*width] = int(((128+(128*sin(x/32.0)))
|
|
+(128+(128*cos(y/32.0)))
|
|
+(128+(128*sin(sqrt((x*x+y*y))/32.0))))/4);
|
|
}
|
|
}
|
|
}
|
|
|
|
void draw() {
|
|
if (r > 128) rd = true;
|
|
if (!rd) r++;
|
|
else r--;
|
|
if (r < 0) rd = false;
|
|
if (g > 128) gd = true;
|
|
if (!gd) g++;
|
|
else g--;
|
|
if (r < 0) gd = false;
|
|
if (b > 128) bd = true;
|
|
if (!bd) b++;
|
|
else b--;
|
|
if (b < 0){ bd = false;}
|
|
float s_1, s_2;
|
|
for (int i = 0; i < 128; i++) {
|
|
s_1 = sin(i*PI/25);
|
|
s_2 = sin(i*PI/50+PI/4);
|
|
pal[i] = color(r+s_1*128, g+s_2*128, b+s_1*128);
|
|
}
|
|
loadPixels();
|
|
for (int i = 0; i < buffer.length; i++) {
|
|
pixels[i] = pal[(buffer[i]+frameCount)&127];
|
|
}
|
|
updatePixels();
|
|
}
|