let circ
let t
function preload(){
circ = loadImage("/assets/Untitled_Artwork%2020_1.png")
}
function setup() {
c = min(windowWidth,windowHeight)*0.8
createCanvas(c,c,WEBGL);
background(100);
noStroke()
texture(circ)
}
function draw() {
t=frameCount/100;
orbitControl()
rotateY(t/10)
background(0)
sphere(4000,30,30)
gasket()
push()
rotateY(PI/2)
scale(2-cos(t),2-cos(t),2-cos(t))
gasket()
pop()
push()
scale(1+sin(t),1+sin(t),1+sin(t))
rotateX(PI/2)
gasket()
pop()
}
function gasket(){
polygon(0,0,148,9,101)
push()
rotate(PI/9)
polygon(0,0,182,9,33)
pop()
push()
rotate(PI/9+PI/27)
polygon(0,0,192,9,15)
pop()
push()
rotate(PI/9-PI/27)
polygon(0,0,192,9,15)
pop()
push()
rotate(PI/9+PI/27+PI/50)
polygon(0,0,195,9,10)
pop()
push()
rotate(PI/9-PI/27-PI/50)
polygon(0,0,195,9,10)
pop()
push()
rotate(PI/9+PI/27+PI/50+PI/70)
polygon(0,0,197,9,5)
pop()
push()
rotate(PI/9-PI/27-PI/50-PI/70)
polygon(0,0,197,9,5)
pop()
push()
rotate(PI/9)
polygon(0,0,161,9,10)
pop()
push()
rotate(PI/9)
polygon(0,0,80,9,55)
pop()
push()
rotate(PI/9)
polygon(0,0,113,9,12)
pop()
polygon(0,0,93,9,10)
push()
polygon(0,0,43,9,30)
sphere(56/2,20,20)
}
function polygon(x, y, radius, npoints,r2) {
let angle = TWO_PI / npoints;
beginShape();
for (let a = 0; a < TWO_PI; a += angle) {
let sx = x + cos(a+t) * radius;
let sy = y + sin(a+t) * radius;
rotateX(t/100)
rotateY(t/200)
push()
translate(sx,sy,0)
sphere(r2/2-r2/3*sin(t)*cos(sx/1000*t),40,40)
pop()
}
endShape(CLOSE);
}