let charges = new Map(); let counter = 0; let sphere_mode = 'circles'; let sphere_radius = 200; function preload() { earth = loadImage("atlas1.jpg"); } function setup() { createCanvas(600, 600, WEBGL); } function draw() { orbitControl(); background(50); make_lights(); draw_sphere(sphere_radius, 25); } function draw_sphere(radius, n_axis_circles) { stroke(0x3f); noFill(); push(); rotateX(TAU / 4); draw_circles( radius, sphere_mode === 'earth' ? 2 : n_axis_circles, color(0x00, 0x9f, 0xff), color(0xff, 0x9f, 0x00), ); pop(); push(); rotateY(TAU / 4); draw_circles( radius, sphere_mode === 'earth' ? 2 : n_axis_circles, color(0xff, 0x00, 0xff), color(0x00, 0xff, 0x00), ); pop(); if (sphere_mode === 'earth') { noStroke(); noFill(); tint(0xff, 0x9f); texture(earth); push(); rotateY(TAU / 4); sphere(radius); pop(); } } function draw_circles(radius, n_circles, pole_1_color, pole_2_color) { push(); stroke(pole_1_color); translate(0, 0, -radius); point(0, 0); pop(); for (let i = 1; i < n_circles; i += 1) { const angle = map(i, 0, n_circles - 1, -TAU / 4, TAU / 4); const circle_radius = radius * cos(angle); push(); translate(0, 0, radius * sin(angle)); circle(0, 0, circle_radius * 2); pop(); } push(); stroke(pole_2_color); translate(0, 0, radius); point(0, 0); pop(); } function make_lights() { let light = createVector(0, 1, -1); light.normalize(); directionalLight(0x1f, 0x1f, 0x1f, light); ambientLight(0xbf); } function keyPressed() { if (key == 'd') { sphere_mode = sphere_mode === 'earth' ? 'circles' : 'earth'; } }