fogón

← AnimalesObjeto 3Dfogon/luciernaga

Luciérnaga

de fogonCC07311 bloques
LuciérnagaArrastrá para girarlo
// «Luciérnaga» · gpt-6-sol (medium)
// A cartoon firefly: a small dark brown body with a red-orange head shield, antennae, little legs, translucent wings and a big round glowing yellow-green tail light at the back.

// Six little legs and rounded feet.
for (const side of [-1, 1]) {
  for (const y of [17, 24, 30]) {
    const hipX = 24 + side * 6;
    const footX = 24 + side * (y === 24 ? 12 : 11);
    line(hipX, y, 14, footX, y + 1, 4, 1.4, "#38251e");
    sphere(footX, y, 2, 2.2, "#513025");
    box(footX - 1, y - 1, 0, footX + 1, y + 1, 1, "#38251e");
  }
}

// Dark, plump body.
ellipsoid(24, 25, 17, 7, 10, 8, "#38251e");
ellipsoid(24, 24, 19, 7, 8, 7, "#593526");
ellipsoid(24, 23, 23, 5, 5, 2, "#70452d");
ellipsoid(24, 30, 17, 7, 4, 7, "#41291f");

// A dark rim makes the lantern read as part of the firefly.
ellipsoid(24, 35, 17, 8, 9, 8, "#39291c");
ellipsoid(24, 35, 19, 7, 8, 6, "#594027");

// Oversized red-orange head and its bright top shield.
ellipsoid(24, 16, 19, 8, 8, 8, "#9e3924");
ellipsoid(24, 15, 20, 7, 7, 7, "#dc592d");
ellipsoid(24, 15, 24, 7, 6, 3, "#f07834");
ellipsoid(24, 14, 26, 5, 4, 1, "#ff9947");

// Simple glossy dot eyes.
for (const x of [20, 28]) {
  sphere(x, 9, 20, 1.7, "#211b19");
  set(x - 1, 8, 21, "#fff4d6");
}

// Two curved, club-tipped antennae.
for (const side of [-1, 1]) {
  const root = 24 + side * 4;
  line(root, 11, 25, root + side * 1, 8, 30, 0.8, "#493023");
  line(root + side, 8, 30, root + side * 4, 5, 34, 0.8, "#493023");
  sphere(root + side * 4, 5, 34, 1.5, "#71412a");
}

// Pulsing yellow-green lantern. Its darker rim stays still.
part("light", [24, 35, 17]);
ellipsoid(24, 36, 17, 7, 7, 7, "#c9ee42");
ellipsoid(24, 36, 19, 6, 6, 5, "#e5f65b");
animate("light", {
  type: "colors",
  palette: ["#bbeb39", "#dafa50", "#fff46a", "#e8f84e"],
  pattern: "pulse",
  glow: 0.8
});

part("body");
ellipsoid(21, 32, 22, 2, 3, 1, "#fff7a3");
sphere(20, 31, 21, 1, "#fffcd0");

// Thin, broad wings, each hinged at the shoulder.
for (const side of [-1, 1]) {
  const name = side === -1 ? "leftWing" : "rightWing";
  part(name, [24 + side * 6, 24, 25]);

  ellipsoid(24 + side * 13, 27, 27, 8, 5, 2, "#799d92");
  ellipsoid(24 + side * 13, 27, 28, 7, 4, 1, "#bce6d7");
  ellipsoid(24 + side * 12, 31, 27, 6, 4, 2, "#91b9aa");
  ellipsoid(24 + side * 12, 31, 28, 5, 3, 1, "#d5f2dd");

  line(24 + side * 6, 24, 28, 24 + side * 18, 27, 29, 0, "#e9f7d9");
  line(24 + side * 9, 26, 29, 24 + side * 15, 32, 29, 0, "#e9f7d9");

  animate(name, {
    type: "swing",
    axis: "y",
    speed: side === -1 ? 10 : -10,
    amplitude: 0.4
  });
}