fogón

← Animals3D assetfogon/abeja

Abeja

by fogonCC016671 blocks
AbejaDrag to turn it
// «Abeja» · gpt-6-sol (medium)
// A chubby cartoon bee: a round yellow body with thick black stripes and a small stinger, a black round head with big eyes, antennae, little black legs and two transparent light blue wings on top.

// The bee faces toward -y.
part("bee", [24, 24, 0]);

// Six stubby legs and their rounded feet.
for (const y of [19, 27, 35]) {
  for (const side of [-1, 1]) {
    const hipX = 24 + side * 10;
    const footX = 24 + side * 13;
    line(hipX, y, 10, footX, y - 1, 3, 1.4, "#25242c");
    ellipsoid(footX, y - 2, 2, 2.3, 2.5, 2, "#15151c");
    box(footX - 1, y - 3, 1, footX, y - 3, 1, "#38363d");
  }
}

// Plump yellow abdomen, with broad stripes that wrap all the way around.
for (let x = 10; x <= 38; x++) {
  for (let y = 11; y <= 43; y++) {
    for (let z = 4; z <= 32; z++) {
      const q =
        ((x - 24) / 13.5) ** 2 +
        ((y - 27) / 16) ** 2 +
        ((z - 18) / 13.5) ** 2;
      if (q > 1) continue;

      const ripple = 0.28 * Math.sin(x * 0.62 + z * 0.3);
      const band = y + ripple;
      const striped =
        (band >= 20 && band <= 24) ||
        (band >= 29 && band <= 33) ||
        (band >= 38 && band <= 41);

      let color;
      if (striped) {
        color = z > 22 ? "#303037" : z < 13 ? "#15151b" : "#222228";
        if (rand() < 0.035) color = "#3b393d";
      } else {
        color = z > 23 ? "#ffe24d" : z < 13 ? "#d99619" : "#ffc52f";
        if (rand() < 0.07) color = z > 19 ? "#ffdc40" : "#eeb124";
      }
      set(x, y, z, color);
    }
  }
}

// A small tapered stinger at the back.
for (let y = 42; y <= 45; y++) {
  const r = [2.6, 2, 1.2, 0.45][y - 42];
  for (let x = 21; x <= 27; x++) {
    for (let z = 15; z <= 21; z++) {
      if ((x - 24) ** 2 + (z - 18) ** 2 <= r * r) {
        set(x, y, z, y === 45 ? "#111118" : "#29272d");
      }
    }
  }
}

// Oversized charcoal head, softly highlighted on top.
ellipsoid(24, 12, 23, 10, 10, 10, "#202027");
for (let x = 14; x <= 34; x++) {
  for (let y = 2; y <= 22; y++) {
    for (let z = 13; z <= 33; z++) {
      const q =
        ((x - 24) / 10) ** 2 +
        ((y - 12) / 10) ** 2 +
        ((z - 23) / 10) ** 2;
      if (q > 1) continue;
      let color = z >= 27 ? "#34333a" : z < 18 ? "#18181e" : "#25242b";
      if (rand() < 0.055) color = "#3c3a40";
      set(x, y, z, color);
    }
  }
}

// Big friendly eyes facing the viewer.
for (const x of [20, 28]) {
  ellipsoid(x, 3.5, 25, 3.1, 2, 3.7, "#f5f9f4");
  ellipsoid(x, 1.9, 24.8, 1.65, 1.1, 2.25, "#101219");
  set(x - 1, 0, 26, "#ffffff");
  set(x, 0, 26, "#ffffff");
}
ellipsoid(17, 5.8, 19, 1.6, 0.8, 1, "#ae636c");
ellipsoid(31, 5.8, 19, 1.6, 0.8, 1, "#ae636c");
line(22, 3, 17, 24, 2, 16, 0, "#e59387");
line(24, 2, 16, 26, 3, 17, 0, "#e59387");

// Curled antennae with round tips.
line(20, 9, 31, 19, 8, 36, 1, "#26252b");
line(19, 8, 36, 17, 7, 38, 1, "#26252b");
ellipsoid(17, 7, 39, 2, 2, 2, "#19191f");
line(28, 9, 31, 29, 8, 36, 1, "#26252b");
line(29, 8, 36, 31, 7, 38, 1, "#26252b");
ellipsoid(31, 7, 39, 2, 2, 2, "#19191f");

animate("bee", { type: "bob", axis: "z", speed: 3, amplitude: 1 });

// Each broad, icy-blue wing is its own flapping part.
function wing(name, side) {
  const pivotX = 24 + side * 7;
  part(name, [pivotX, 25, 30]);

  const cx = 24 + side * 15;
  for (let x = cx - 9; x <= cx + 9; x++) {
    for (let y = 18; y <= 37; y++) {
      for (let z = 32; z <= 36; z++) {
        const u = (x - cx) / 8.5;
        const v = (y - (27 + side * (x - cx) * 0.3)) / 6.5;
        const w = (z - 34) / 2;
        const rim = u * u + v * v;
        if (rim + w * w > 1) continue;

        let color = rim > 0.77 ? "#83bbd0" : "#b9ebf0";
        if (z >= 35 && rim < 0.58) color = "#d9f8f7";
        if (z <= 33) color = "#91cbd9";
        if (rand() < 0.045 && rim < 0.7) color = "#f0ffff";
        set(x, y, z, color);
      }
    }
  }

  // A sturdy little attachment at the shoulder.
  ellipsoid(pivotX, 25, 31, 2.5, 2.5, 1.5, "#9dd7e2");
}

wing("leftWing", -1);
wing("rightWing", 1);
animate("leftWing", { type: "swing", axis: "y", speed: 12, amplitude: 0.5 });
animate("rightWing", { type: "swing", axis: "y", speed: -12, amplitude: 0.5 });