fogón

← AnimalesObjeto 3Dfogon/hipopotamo

Hipopótamo

de fogonCC022991 bloques
HipopótamoArrastrá para girarlo
// «Hipopótamo» · gpt-6-sol (medium)
// A chubby cartoon hippo, horizontal along y, head at the front (-y): a huge round barrel body in purple-grey with a pink belly, four short thick legs, a massive head with a wide flat muzzle, big nostrils on top, two small round ears, small eyes on top and two little white teeth showing. A tiny tail.

// Chubby toy hippo: front faces -y.
const body = "#827486";
const head = "#8e7d91";
const muzzle = "#a58ca0";
const jaw = "#b58fa2";
const belly = "#dc9cab";
const dark = "#342b3b";

// Barrel body and its broad pink underside.
ellipsoid(24, 27, 21, 14, 14, 14, body);
ellipsoid(24, 26, 13, 13.8, 12.5, 9, belly);

// Oversized head, lower jaw, and broad, flat-topped muzzle.
ellipsoid(24, 16, 26, 12.5, 11, 11, head);
ellipsoid(24, 8, 14, 12.5, 7, 4.5, jaw);
ellipsoid(24, 7, 21, 14, 7, 6.5, muzzle);
box(14, 3, 18, 34, 9, 24, muzzle);
box(16, 2, 18, 32, 4, 23, muzzle);

// Gentle top lighting and subtle toy-like surface variation.
forEach((x, y, z, color) => {
  let shades;
  if (color === body) shades = ["#716575", body, "#928398"];
  else if (color === head) shades = ["#7e7083", head, "#a08ca2"];
  else if (color === muzzle) shades = ["#977f93", muzzle, "#b69bad"];
  else if (color === jaw) shades = ["#a68094", jaw, "#c59aaa"];
  else if (color === belly) shades = ["#cb8c9e", belly, "#e9afba"];
  else return;

  const light = z > 26 ? 2 : z < 15 ? 0 : 1;
  const variation = rand();
  set(x, y, z, shades[variation < 0.075 ? Math.max(0, light - 1)
                       : variation > 0.925 ? Math.min(2, light + 1)
                       : light]);
});

// Little round ears with inset pink centers.
for (const x of [14, 34]) {
  ellipsoid(x, 16, 38, 3.5, 3, 4, "#796a80");
  ellipsoid(x, 15, 39, 3, 2.5, 3.5, "#a994a8");
  ellipsoid(x, 12.8, 39, 1.8, 0.8, 2.4, "#e5a3b3");
}

// Small, widely spaced eyes above the muzzle.
for (const x of [17, 31]) {
  ellipsoid(x, 9, 32, 2.1, 1.5, 2, "#b9a3b3");
  ellipsoid(x, 8, 33, 1.45, 1.1, 1.45, dark);
  set(x - 1, 7, 34, "#ffffff");
}

// Raised nostrils, easily visible from above.
for (const x of [17, 31]) {
  ellipsoid(x, 5, 26, 2.7, 2.2, 1.5, "#927b90");
  ellipsoid(x, 4, 27, 1.45, 1.3, 0.9, dark);
  set(x - 1, 4, 27, "#554558");
}

// A smiling mouth tucked under the muzzle and two tiny teeth.
line(17, 2, 16, 31, 2, 16, 0, "#684657");
for (const x of [17, 31]) {
  box(x - 1, 1, 14, x + 1, 2, 16, "#fff5e8");
  box(x - 1, 1, 14, x + 1, 1, 14, "#eaded5");
}

// Tiny tail and rounded pink tuft.
line(24, 40, 23, 24, 43, 20, 1, "#786a7e");
ellipsoid(24, 43, 19, 1.6, 1.5, 2, "#b58fa2");

// Four independently swinging, short, thick legs.
function leg(name, x, y, speed) {
  part(name, [x, y, 13]);
  ellipsoid(x, y, 7, 4.3, 4.1, 7, "#796b80");
  ellipsoid(x, y - 0.5, 6, 4.1, 4, 6, "#918095");
  box(x - 3, y - 3, 0, x + 3, y + 3, 4, "#85758a");
  ellipsoid(x, y - 2, 2, 4, 3.5, 2.5, "#a18a9b");
  for (const dx of [-2, 0, 2]) {
    box(x + dx, y - 5, 1, x + dx + 1, y - 4, 2, "#e7d6db");
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.2 });
  part("body");
}

leg("front-left", 14, 18, 3);
leg("front-right", 34, 18, -3);
leg("rear-left", 14, 35, -3);
leg("rear-right", 34, 35, 3);