/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.9lle7lM3o$3/rev.475
*
* authors:
* Andras Turi
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
// This code comes from
// http://psychoproject.net/~greger/demo/solskogen/
import processing.opengl.* ;
PImage tex;
float time;
void setup() {
size(1280, 720, OPENGL);
background(255);
tex = createImage(256, 256, RGB);
updateTexture(tex);
}
void updateTexture(PImage tex) {
tex.loadPixels();
for(int i = 0; i < tex.pixels.length; i++) {
tex.pixels[i] = 0xff000000 | ((i&255)<<16) | ((i&255)<<8) | (i&255);
}
for(int i = 0; i < tex.width; i++) {
tex.pixels[i] = 0xff000000;
tex.pixels[(tex.width*(tex.height-1)) + i] = 0xff000000;
tex.pixels[(tex.width*i) + 0] = 0xff000000;
tex.pixels[(tex.width*i) + (tex.width-1)] = 0xff000000;
}
tex.updatePixels();
}
PVector pol2cart(float a, float r) {
return new PVector(r*cos(a), r*sin(a));
}
/*
void drawSimple() {
fill(255, 255, 0, 255);
textureMode(NORMALIZED);
stroke(0, 255);
beginShape(QUAD);
texture(tex);
vertex(10, 20, 0, 0);
vertex(80, 5, 1, 0);
vertex(95, 90, 1, 1);
vertex(40, 95, 0, 1);
endShape();
}
*/
void draw() {
time = millis() / (100.0);
noStroke();
background(255);
stroke(0, 255);
camera(0.0, 100.0, 120.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
rotateZ(time/123.0);
rotateY(time/100.0);
rotateX(time/117.0);
lightSpecular(200, 200, 200);
directionalLight(204, 204, 204, 0, 0, -1);
pointLight(240, 240, 240, 1000, 1000, 1000);
rotateX(time/43.0);
rotateY(time/27.0);
rotateZ(time/33.0);
drawing()
}
void drawing() {
// Draw sphere
noStroke();
specular(255, 100, 100);
shininess(1.0);
fill(202, 0, 0);
pushMatrix();
rotateZ(time/80.0);
rotateY(time/94.0);
rotateX(time/87.0);
sphere(39.0 + sin(time/327.0)*10.0);
popMatrix();
drawCircles(50);
pushMatrix();
translate(80, 0, 0);
rotateZ(-time/32.0);
rotateY(-time/41.0);
rotateX(-time/37.0);
fill(0, 255, 0);
box(15);
drawCircles(20);
popMatrix();
pushMatrix();
translate(-80, 0, 0);
rotateZ(-time/39.0);
rotateY(-time/31.0);
rotateX(-time/27.0);
fill(0, 255, 0);
box(15);
drawCircles(20);
popMatrix();
drawCircles(50);
pushMatrix();
translate(0, 80, 0);
rotateZ(-time/32.0);
rotateY(-time/41.0);
rotateX(-time/37.0);
fill(0, 255, 0);
box(15);
drawCircles(20);
popMatrix();
pushMatrix();
translate(0, -80, 0);
rotateZ(-time/39.0);
rotateY(-time/31.0);
rotateX(-time/27.0);
fill(0, 255, 0);
box(15);
drawCircles(20);
popMatrix();
pushMatrix();
drawBox(200, tex);
popMatrix();
}
void drawCircles(float s) {
// Draw circles
stroke(0);
noFill();
pushMatrix();
translate(0.0, 0.0, cos(time/23.0)*s);
ellipse(0, 0, abs(sin(time/23.0))*(s+s), abs(sin(time/23.0))*(s+s));
popMatrix();
pushMatrix();
translate(0.0, 0.0, sin(time/53.0)*s);
ellipse(0, 0, abs(cos(time/53.0))*(s+s), abs(cos(time/53.0))*(s+s));
popMatrix();
pushMatrix();
rotateY(HALF_PI);
translate(0.0, 0.0, cos(time/20.0)*s);
ellipse(0, 0, abs(sin(time/20.0))*(s+s), abs(sin(time/20.0))*(s+s));
popMatrix();
pushMatrix();
rotateY(HALF_PI);
translate(0.0, 0.0, sin(time/31.0)*s);
ellipse(0, 0, abs(cos(time/31.0))*(s+s), abs(cos(time/31.0))*(s+s));
popMatrix();
pushMatrix();
rotateX(HALF_PI);
translate(0.0, 0.0, cos(time/27.0)*s);
ellipse(0, 0, abs(sin(time/27.0))*(s+s), abs(sin(time/27.0))*(s+s));
popMatrix();
pushMatrix();
rotateX(HALF_PI);
translate(0.0, 0.0, sin(time/47.0)*s);
ellipse(0, 0, abs(cos(time/47.0))*(s+s), abs(cos(time/47.0))*(s+s));
popMatrix();
}
void drawBox(float size, PImage tex) {
textureMode(NORMALIZED);
beginShape(QUADS);
if(tex != null) {
noStroke();
fill(255, 255);
texture(tex);
}
// -Z "back" face
vertex( size, -size, -size, 0, 0);
vertex(-size, -size, -size, 1, 0);
vertex(-size, size, -size, 1, 1);
vertex( size, size, -size, 0, 1);
// +Z "front" face
vertex(-size, -size, size, 0, 0);
vertex( size, -size, size, 1, 0);
vertex( size, size, size, 1, 1);
vertex(-size, size, size, 0, 1);
// +Y "bottom" face
vertex(-size, size, size, 0, 0);
vertex( size, size, size, 1, 0);
vertex( size, size, -size, 1, 1);
vertex(-size, size, -size, 0, 1);
// -Y "top" face
vertex(-size, -size, -size, 0, 0);
vertex( size, -size, -size, 1, 0);
vertex( size, -size, size, 1, 1);
vertex(-size, -size, size, 0, 1);
// +X "right" face
vertex( size, -size, size, 0, 0);
vertex( size, -size, -size, 1, 0);
vertex( size, size, -size, 1, 1);
vertex( size, size, size, 0, 1);
// -X "left" face
vertex(-size, -size, -size, 0, 0);
vertex(-size, -size, size, 1, 0);
vertex(-size, size, size, 1, 1);
vertex(-size, size, -size, 0, 1);
endShape();
}