fogón

← AnimalesObjeto 3Dfogon/nandu

Ñandú

de fogonCC09655 bloques
ÑandúArrastrá para girarlo
// «Ñandú» · gpt-6-sol (medium)
// A cartoon rhea (ñandú), a big flightless bird standing on two long thick legs facing front (-y): a round fluffy grey-brown feathered body with darker droopy wing feathers, a long thin neck and a small head with a short flat beak and black eyes.

const feather = "#897966";
const featherLight = "#aa9980";
const featherTop = "#b9aa90";
const featherDark = "#6b5b50";
const wingDark = "#67564b";
const wingMid = "#786457";
const leg = "#8d7960";
const legLight = "#a79070";
const beak = "#c49b61";
const beakLight = "#e0b978";

// Round, solid body.
ellipsoid(24, 26, 22, 15, 11, 10, feather);
forEach((x, y, z, color) => {
  if (color !== feather) return;
  let shade = z >= 28 ? featherTop : z >= 22 ? featherLight : z < 17 ? featherDark : feather;
  if (rand() < 0.12) shade = rand() < 0.55 ? featherLight : featherDark;
  set(x, y, z, shade);
});

// Soft breast markings on the front-facing surface.
for (let z = 17; z <= 29; z++) {
  for (let x = 12; x <= 36; x++) {
    const d = ((x - 24) / 15) ** 2 + ((z - 22) / 10) ** 2;
    if (d < 0.78 && rand() < 0.21) {
      const y = Math.round(26 - 11 * Math.sqrt(1 - d));
      if (get(x, y, z)) set(x, y - 1, z, z > 24 ? featherTop : featherLight);
    }
  }
}

// Short, fluffy tail at the back.
for (const [x, z, r] of [[18, 27, 3], [22, 29, 3], [26, 29, 3], [30, 27, 3]]) {
  ellipsoid(x, 36, z, r, 5, 3, featherLight);
  ellipsoid(x, 39, z - 1, r - 1, 3, 2, feather);
}

// Broad drooping wings, with distinct rounded feather tips.
for (const side of [-1, 1]) {
  ellipsoid(24 + side * 12, 23, 23, 4, 6, 7, wingMid);
  ellipsoid(24 + side * 14, 23, 21, 3, 5, 6, wingDark);
  for (let i = 0; i < 4; i++) {
    const x = 24 + side * (12 + i);
    line(x, 19 + i, 23, x + side * (i % 2), 22 + i, 16 - (i % 2), 1, i % 2 ? wingDark : wingMid);
    ellipsoid(x + side * (i % 2), 22 + i, 16 - (i % 2), 1, 2, 2, wingDark);
  }
  ellipsoid(24 + side * 11, 20, 27, 2, 3, 2, feather);
}

// Two independent walking legs, hinged beneath the body.
for (const [side, speed] of [[-1, 5], [1, -5]]) {
  const x = 24 + side * 6;
  const name = side < 0 ? "leftLeg" : "rightLeg";
  part(name, [x, 26, 15]);
  ellipsoid(x, 26, 14, 3, 3, 3, featherDark);
  cylinder(x, 26, 4, 2, 11, leg);
  cylinder(x, 26, 4, 1, 10, legLight);
  ellipsoid(x, 24, 3, 3, 4, 2, leg);
  ellipsoid(x, 21, 1, 4, 6, 1, legLight);
  for (const dx of [-2, 0, 2]) {
    line(x + dx * 0.5, 22, 1, x + dx, 15, 0, 1, legLight);
    set(x + dx, 14, 0, "#665847");
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}

part("neck", [24, 18, 28]);
// Upright neck leans toward the viewer, ending in a generously sized head.
line(24, 19, 27, 24, 17, 34, 3, feather);
line(24, 17, 33, 24, 13, 39, 2, featherLight);
ellipsoid(24, 18, 29, 4, 3, 3, featherLight);
ellipsoid(24, 12, 40, 5, 4, 4, featherLight);
ellipsoid(24, 13, 42, 4, 3, 2, featherTop);

// Little crown tufts.
for (const [x, y, z] of [[21, 12, 44], [24, 13, 45], [27, 13, 44]]) {
  ellipsoid(x, y, z, 1, 1, 2, featherTop);
}

// Flat, short bill pointing forward (-y).
box(22, 6, 37, 26, 9, 39, beak);
box(21, 7, 38, 27, 9, 39, beakLight);
box(22, 4, 37, 26, 6, 38, beakLight);
box(22, 4, 37, 26, 5, 37, beak);

// Simple bright-eyed toy face.
for (const x of [20, 28]) {
  ellipsoid(x, 9, 41, 2, 1, 2, "#382f2d");
  set(x - 1, 8, 42, "#ffffff");
}
animate("neck", { type: "swing", axis: "x", speed: 4, amplitude: 0.2 });
part("body", [24, 26, 22]);