fogón

← City3D assetfogon/vuelta-al-mundo

Vuelta al mundo

by fogonCC07342 blocks
Vuelta al mundoDrag to turn it
// «Vuelta al mundo» · gpt-6-sol (medium)
// A ferris wheel: a large white steel wheel standing upright in the x-z plane on two A-frame legs, with spokes radiating from a central hub and eight colorful cabins (red, yellow, blue, green) hanging around the rim, and a small ticket booth at its foot.

// Plaza
box(3, 5, 0, 45, 36, 0, "#bfc4c2");
for (let i = 0; i < 330; i++) {
  const x = 3 + Math.floor(rand() * 43);
  const y = 5 + Math.floor(rand() * 32);
  set(x, y, 0, rand() < 0.5 ? "#cbd0cc" : "#adb4b1");
}
box(3, 17, 0, 45, 18, 0, "#e4dcc7");
box(18, 6, 0, 45, 10, 0, "#727a7b");
for (let x = 20; x < 44; x += 6) box(x, 8, 0, x + 2, 8, 0, "#f0d66b");

// Ticket booth: warm brick, cream trim, striped canopy.
box(6, 7, 1, 16, 16, 8, "#b85e4e");
box(6, 7, 8, 16, 16, 9, "#f2dfba");
for (let z = 2; z <= 7; z += 2) {
  box(6, 6, z, 16, 6, z, "#cd7660");
}
for (let x = 7; x <= 16; x += 3) {
  for (let z = 2; z <= 7; z += 2) {
    set(x + ((z / 2) % 2), 6, z, "#9f493f");
  }
}
box(8, 6, 3, 14, 6, 6, "#263e4c");
box(9, 5, 4, 13, 5, 5, "#73c6cf");
box(8, 5, 2, 14, 6, 3, "#e8d4a8");
box(7, 5, 7, 15, 5, 8, "#173d40");
for (let x = 8; x <= 14; x += 2) set(x, 4, 8, "#f4d377");
box(5, 5, 9, 17, 17, 9, "#f7e6c5");
for (let x = 5; x <= 17; x++) {
  box(x, 4, 8, x, 6, 8, x % 4 < 2 ? "#df6556" : "#ffdc91");
}
box(5, 5, 10, 17, 17, 10, "#e9d1ac");
box(7, 8, 11, 15, 15, 11, "#f8e9c9");

// Four splayed steel legs, with feet and cross braces.
for (const y of [18, 31]) {
  line(13, y, 1, 24, y, 24, 1, "#aebbc0");
  line(35, y, 1, 24, y, 24, 1, "#aebbc0");
  line(14, y - 1, 2, 24, y - 1, 24, 0, "#f5f6ec");
  line(34, y - 1, 2, 24, y - 1, 24, 0, "#f5f6ec");
  line(16, y, 7, 32, y, 7, 0, "#718991");
  box(11, y - 2, 1, 15, y + 2, 2, "#718991");
  box(33, y - 2, 1, 37, y + 2, 2, "#718991");
  cylinder(24, y - 1, 24, 2, 3, "#596c75", "y");
}
line(24, 18, 24, 24, 32, 24, 1, "#84979d");

// The complete rotating wheel, including its eight cabins.
part("wheel", [24, 24, 24]);

// Twin white rims with pale-blue inner edges.
for (let a = 0; a < Math.PI * 2; a += 0.012) {
  for (const y of [22, 27]) {
    for (const r of [16.5, 17.2]) {
      const x = Math.round(24 + Math.sin(a) * r);
      const z = Math.round(24 + Math.cos(a) * r);
      set(x, y, z, r < 17 ? "#a8c8d0" : "#f5f6ee");
    }
  }
}
for (let i = 0; i < 16; i++) {
  const a = i * Math.PI / 8;
  const dx = Math.sin(a), dz = Math.cos(a);
  const heavy = i % 2 === 0;
  for (const y of [22, 27]) {
    line(
      24 + dx * 2, y, 24 + dz * 2,
      24 + dx * 17, y, 24 + dz * 17,
      heavy ? 1 : 0,
      heavy ? "#e8eee9" : "#b5c9cd"
    );
  }
}
for (let i = 0; i < 8; i++) {
  const a = i * Math.PI / 4;
  const x = 24 + Math.sin(a) * 17;
  const z = 24 + Math.cos(a) * 17;
  line(x, 22, z, x, 27, z, 0, "#e8eee9");
}
cylinder(24, 20, 24, 3, 9, "#f5f1dd", "y");
cylinder(24, 19, 24, 2, 2, "#dcab53", "y");
cylinder(24, 28, 24, 2, 2, "#dcab53", "y");
set(24, 18, 24, "#2d6970");

const cabins = [
  ["#dc594d", "#ad3e3b", "#fa8a6b"],
  ["#efd15b", "#bf9b39", "#ffeb9d"],
  ["#428fc1", "#31648f", "#76c4df"],
  ["#67b58b", "#34846a", "#a0d8a0"]
];
for (let i = 0; i < 8; i++) {
  const a = i * Math.PI / 4;
  const cx = Math.round(24 + Math.sin(a) * 18);
  const cz = Math.round(24 + Math.cos(a) * 18);
  const [paint, shade, highlight] = cabins[i % 4];

  // Chunky enclosed gondola, always upright in the model.
  box(cx - 3, 20, cz - 2, cx + 3, 27, cz + 1, paint);
  box(cx - 3, 20, cz - 2, cx + 3, 27, cz - 2, shade);
  box(cx - 3, 19, cz + 2, cx + 3, 28, cz + 2, highlight);
  box(cx - 2, 20, cz + 3, cx + 2, 27, cz + 3, paint);

  // Broad front window, mullions, and a contrasting lower apron.
  box(cx - 2, 19, cz - 1, cx + 2, 19, cz + 1, "#244f62");
  box(cx - 2, 18, cz, cx + 2, 18, cz + 1, "#8bd1da");
  box(cx, 18, cz - 1, cx, 18, cz + 1, "#eaf1df");
  box(cx - 3, 19, cz - 2, cx + 3, 19, cz - 2, shade);
  set(cx, 18, cz - 2, "#f8df83");

  // Side windows and bright corner pillars.
  box(cx - 3, 22, cz - 1, cx - 3, 25, cz + 1, "#39748c");
  box(cx + 3, 22, cz - 1, cx + 3, 25, cz + 1, "#39748c");
  for (const x of [cx - 3, cx + 3]) {
    box(x, 19, cz, x, 19, cz + 1, highlight);
  }

  // Silver hanger at the rim attachment.
  line(cx, 23, cz + 3, cx, 23, cz + 4, 0, "#e9eee9");
}
animate("wheel", { type: "spin", axis: "y", speed: 0.5 });