Загрузка данных


function setup() {
  createCanvas(500, 500, WEBGL);
}

function draw() {
  background(30); // Темный фон, чтобы пончики смотрелись круче
  orbitControl(); // Всё еще можно крутить всю сцену мышкой
  
  // Включаем свет и красивый материал
  lights();
  normalMaterial();
  
  // --- 1. РИСУЕМ БОЛЬШОЙ ВЕРТИКАЛЬНЫЙ ПОНЧИК ---
  push(); // Запоминаем начальную точку (центр экрана)
    // По умолчанию пончик лежит горизонтально. 
    // Поворачиваем его по оси X на 90 градусов (HALF_PI), чтобы он встал вертикально
    rotateX(HALF_PI); 
    // torus(радиус всего пончика, толщина самой колбаски)
    torus(120, 20); 
  pop(); // Сбрасываем поворот, возвращаемся в центр холста

  // --- 2. РИСУЕМ МАЛЕНЬКИЙ ПОНЧИК, КОТОРЫЙ КРУТИТСЯ ---
  push(); // Снова берем чистую точку отсчета в центре
    
    // Заставляем маленький пончик бегать по кругу большого пончика.
    // frameCount — это счетчик кадров, он постоянно растет и создает движение.
    // Умножаем на 0.02, чтобы движение было плавным, а не безумно быстрым.
    let angle = frameCount * 0.02; 
    
    // Вращаем саму ось координат, чтобы следующий translate сдвинул пончик по кругу
    rotateZ(angle); 
    
    // Сдвигаем маленький пончик на расстояние радиуса большого пончика (120 пикселей)
    translate(120, 0, 0); 
    
    // Делаем так, чтобы сам маленький пончик лежал горизонтально
    // (для этого вращаем его по его собственной оси X)
    rotateX(HALF_PI);
    
    // Рисуем маленький пончик (радиус 35, толщина 10)
    torus(35, 10);
  pop(); // Всё сбрасываем для следующего кадра
}