fogón

← Antiguo y prehistoriaObjeto 3Dfogon/anquilosaurio

Anquilosaurio

de fogonCC015326 bloques
AnquilosaurioArrastrá para girarlo
// «Anquilosaurio» · gpt-6-sol (medium)
// A low wide armored cartoon ankylosaurus on four stubby legs, body horizontal along y and almost as wide as it is long. The back is covered in a shell of bumpy brown armor plates with rows of short cream spikes along the sides; a small flat head at the front (-y); at the back a long tail ending in a big round bony club. Earthy brown and khaki.

// Low, wide body with a darker armored back.
ellipsoid(24, 23, 16, 15, 13, 9, "#77734e");
ellipsoid(24, 23, 13, 14, 12, 5, "#9a9166");
ellipsoid(24, 23, 20, 16, 12, 7, "#594a34");
ellipsoid(24, 23, 21, 15, 12, 7, "#796244");

// Subtle earthy variation on the large surfaces.
forEach((x, y, z, color) => {
  if (color === "#796244" && rand() < 0.055)
    set(x, y, z, rand() < 0.5 ? "#8b704b" : "#69563c");
  if (color === "#9a9166" && rand() < 0.035)
    set(x, y, z, "#aaa076");
});

// Rounded armor plates, each with a dark rim and a lighter raised center.
for (let row = 0; row < 4; row++) {
  const yy = 15 + row * 5;
  for (let col = 0; col < 4; col++) {
    const xx = 15 + col * 6 + (row % 2);
    const slope = 1 - (xx - 24) ** 2 / 225 - (yy - 23) ** 2 / 144;
    const zz = Math.round(21 + 7 * Math.sqrt(Math.max(0, slope)));
    ellipsoid(xx, yy, zz, 3, 3, 2, "#483b2e");
    ellipsoid(xx, yy, zz + 1, 3, 2, 2,
      (row + col) % 3 === 0 ? "#a18459" : "#94764e");
    ellipsoid(xx - 1, yy - 1, zz + 2, 1, 1, 1, "#b49a6b");
  }
}

// Short cream spikes projecting from both sides of the shell.
for (const yy of [15, 20, 25, 30]) {
  for (const side of [-1, 1]) {
    const rootX = 24 + side * 14;
    const zz = yy === 15 || yy === 30 ? 20 : 22;
    ellipsoid(rootX, yy, zz, 2, 2, 2, "#ad936b");
    for (let t = 0; t < 5; t++) {
      const x = rootX + side * (t + 1);
      const half = t < 2 ? 2 : t < 4 ? 1 : 0;
      box(x, yy - half, zz - half, x, yy + half, zz + half,
        t < 2 ? "#d6c39a" : "#f0dfb8");
    }
  }
}

// Small, broad, friendly head and flat muzzle.
ellipsoid(24, 11, 17, 9, 7, 5, "#807a54");
ellipsoid(24, 8, 15, 9, 5, 3, "#a79b70");
ellipsoid(24, 6, 14, 8, 3, 2, "#b2a77b");
box(19, 3, 12, 29, 3, 12, "#65593f");

for (const eyeX of [19, 29]) {
  ellipsoid(eyeX, 6, 20, 2, 2, 2, "#d3c198");
  ellipsoid(eyeX, 4, 20, 1, 1, 2, "#26251f");
  set(eyeX, 3, 21, "#fff7dc");
}
set(21, 3, 15, "#594c3b");
set(27, 3, 15, "#594c3b");

// Four independently swinging, chunky legs.
function leg(name, x, y, speed) {
  part(name, [x, y, 13]);
  ellipsoid(x, y, 11, 5, 5, 5, "#706a49");
  ellipsoid(x, y - 1, 6, 4, 4, 6, "#827a54");
  ellipsoid(x, y - 3, 2, 5, 5, 2, "#a09469");
  for (const dx of [-3, 0, 3]) {
    box(x + dx, y - 8, 0, x + dx + 1, y - 6, 1, "#ded0a9");
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
leg("front-left", 13, 17, 4);
leg("front-right", 35, 17, -4);
leg("rear-left", 13, 30, -4);
leg("rear-right", 35, 30, 4);

// Tapered tail and oversized knobby bony club.
part("tail", [24, 34, 16]);
ellipsoid(24, 36, 16, 5, 5, 4, "#6f6548");
ellipsoid(24, 39, 15, 3, 5, 3, "#877655");
ellipsoid(24, 43, 15, 5, 4, 4, "#675841");
ellipsoid(24, 42, 16, 5, 3, 4, "#a18b62");
ellipsoid(21, 43, 16, 2, 2, 2, "#b49c70");
ellipsoid(27, 43, 16, 2, 2, 2, "#8d7653");
ellipsoid(24, 46, 15, 2, 1, 2, "#8c7754");
animate("tail", { type: "swing", axis: "z", speed: 2.5, amplitude: 0.4 });
part("body");