fogón

← AnimalesObjeto 3Dfogon/mono

Mono

de fogonCC011255 bloques
MonoArrastrá para girarlo
// «Mono» · gpt-6-sol (medium)
// A playful cartoon brown monkey standing on two legs facing front (-y): a round body with a lighter tan belly, long arms, a round head with a big tan heart-shaped face, round ears, black dot eyes and a wide smile. A long curly tail rising behind it. It holds a yellow banana in one hand.

const fur = "#965329";
const furLight = "#ac6633";
const furDark = "#783c22";
const tan = "#edbd7e";
const tanLight = "#ffd29a";
const tanShade = "#dba567";
const ink = "#271b19";

function furry(cx, cy, cz, rx, ry, rz) {
  for (let x = Math.ceil(cx - rx); x <= cx + rx; x++)
    for (let y = Math.ceil(cy - ry); y <= cy + ry; y++)
      for (let z = Math.ceil(cz - rz); z <= cz + rz; z++) {
        const d = ((x - cx) / rx) ** 2 +
                  ((y - cy) / ry) ** 2 +
                  ((z - cz) / rz) ** 2;
        if (d <= 1) {
          let color = z > cz + 2 ? furLight : z < cz - 3 ? furDark : fur;
          if (rand() < 0.075) color = color === furDark ? fur : furLight;
          set(x, y, z, color);
        }
      }
}

part("body", [24, 23, 18]);

// Short legs and oversized forward-facing feet.
furry(18, 23, 7, 3.5, 3.5, 7);
furry(30, 23, 7, 3.5, 3.5, 7);
ellipsoid(18, 18, 2, 5, 6, 2.5, furDark);
ellipsoid(30, 18, 2, 5, 6, 2.5, furDark);
ellipsoid(18, 16, 3, 4, 4, 1.5, fur);
ellipsoid(30, 16, 3, 4, 4, 1.5, fur);

furry(24, 23, 16, 9, 7, 11);
ellipsoid(24, 16.5, 15, 7, 2.8, 8, tanShade);
ellipsoid(24, 14.8, 17, 6, 2, 6.5, tan);

// Round ears sit behind the enormous head.
furry(11, 22, 33, 4, 3.5, 5);
furry(37, 22, 33, 4, 3.5, 5);
ellipsoid(10, 18.8, 33, 2.5, 1.3, 3, tanShade);
ellipsoid(38, 18.8, 33, 2.5, 1.3, 3, tanShade);

furry(24, 22, 32, 11, 9, 9);

// Two upper lobes and a broad lower muzzle make the tan face heart-shaped.
ellipsoid(20, 13, 35, 5.3, 4, 5.2, tan);
ellipsoid(28, 13, 35, 5.3, 4, 5.2, tan);
ellipsoid(24, 12, 30, 7, 4, 5.5, tanShade);
ellipsoid(24, 10.8, 31, 6, 2.5, 4.5, tan);
ellipsoid(19, 10.5, 37, 2.2, 1, 1.5, tanLight);
ellipsoid(29, 10.5, 37, 2.2, 1, 1.5, tanLight);

// Shiny dot eyes, little nose, and an unmistakable wide grin.
ellipsoid(20, 8.5, 35, 1.3, 0.8, 1.5, ink);
ellipsoid(28, 8.5, 35, 1.3, 0.8, 1.5, ink);
set(20, 8, 36, "#ffffff");
set(28, 8, 36, "#ffffff");
ellipsoid(24, 8.3, 31, 1.6, 0.8, 1, "#543023");

const smile = [
  [19, 29], [20, 28], [21, 27], [22, 27], [23, 26],
  [24, 26], [25, 26], [26, 27], [27, 27], [28, 28], [29, 29]
];
for (const [x, z] of smile) set(x, 9, z, ink);
set(19, 9, 30, ink);
set(29, 9, 30, ink);

// Curly tail rises behind the monkey and peeks out beside its head.
part("tail", [29, 30, 13]);
const curl = [
  [29, 30, 13], [33, 33, 14], [37, 35, 18],
  [40, 35, 23], [40, 35, 28], [38, 35, 32],
  [35, 35, 33], [33, 35, 31], [34, 35, 28]
];
for (let i = 0; i < curl.length - 1; i++) {
  const a = curl[i], b = curl[i + 1];
  line(...a, ...b, i < 3 ? 2.2 : 1.8, i % 3 === 0 ? furLight : fur);
}
sphere(34, 35, 28, 2, furDark);
animate("tail", { type: "swing", axis: "y", speed: 2, amplitude: 0.3 });

part("leftArm", [15, 22, 24]);
furry(12, 20, 19, 3.7, 3.5, 6);
line(12, 19, 17, 9, 16, 12, 2.5, fur);
sphere(9, 16, 12, 3, furLight);

// A chunky crescent banana held against the front of the body.
const banana = [
  [9, 13, 12], [9, 12, 10], [11, 11, 8],
  [14, 11, 8], [17, 12, 10], [18, 13, 13]
];
for (let i = 0; i < banana.length - 1; i++)
  line(...banana[i], ...banana[i + 1], 1.8, i < 2 ? "#f5c735" : "#ffdb45");
line(9, 13, 12, 9, 14, 13, 0.7, "#77502a");
line(18, 13, 13, 19, 14, 14, 0.7, "#77502a");
animate("leftArm", { type: "swing", axis: "x", speed: 4, amplitude: 0.5 });

part("rightArm", [33, 22, 24]);
furry(36, 20, 19, 3.7, 3.5, 6);
line(36, 19, 17, 39, 16, 12, 2.5, fur);
sphere(39, 16, 12, 3, furLight);
animate("rightArm", { type: "swing", axis: "x", speed: -4, amplitude: 0.5 });

part("body", [24, 23, 18]);