fogón

← Antiguo y prehistoriaObjeto 3Dfogon/gladiador

Gladiador

de fogonCC07074 bloques
GladiadorArrastrá para girarlo
// «Gladiador» · gpt-6-sol (medium)
// A chunky cartoon gladiator facing front (-y): a bronze helmet with a grated visor and a plume, bare muscular torso with a leather shoulder guard on one arm, brown belt and kilt, a round bronze shield and a trident.

const skin = "#d99160", skinLight = "#efb47d", skinDark = "#b96c49";
const bronze = "#b77a37", bronzeLight = "#e2aa56", bronzeDark = "#80502c";
const leather = "#754532", leatherLight = "#a46743";
const red = "#a93835", redLight = "#d65848";

// Legs pivot separately beneath the kilt.
for (const [name, x, speed] of [
  ["leftLeg", 19, 4],
  ["rightLeg", 29, -4]
]) {
  part(name, [x, 24, 16]);
  ellipsoid(x, 24, 11, 3, 3, 6, skin);
  box(x - 2, 22, 3, x + 2, 26, 9, skin);
  box(x - 2, 20, 0, x + 2, 27, 2, leather);
  box(x - 2, 17, 0, x + 2, 21, 1, leatherLight); // broad sandal toe
  box(x - 2, 20, 2, x + 2, 26, 2, bronzeDark);
  box(x - 2, 21, 6, x + 2, 25, 6, bronzeDark);
  box(x - 1, 20, 6, x + 1, 20, 6, bronzeLight);
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}

part("body", [24, 24, 22]);

// Bare, broad-shouldered torso.
ellipsoid(24, 24, 25, 9, 5, 9, skin);
ellipsoid(19, 22, 28, 5, 4, 4, skinLight);
ellipsoid(29, 22, 28, 5, 4, 4, skinLight);
box(22, 18, 21, 25, 19, 26, skinLight);
box(19, 19, 27, 22, 19, 29, skinLight);
box(26, 19, 27, 29, 19, 29, skinLight);
box(20, 19, 23, 22, 19, 23, skinDark);
box(26, 19, 23, 28, 19, 23, skinDark);
set(24, 18, 20, skinDark);
box(22, 22, 30, 26, 26, 33, skin);

// Wide leather belt, buckle, and layered gladiator kilt.
box(16, 19, 17, 32, 29, 19, leather);
box(17, 18, 18, 31, 19, 19, leatherLight);
box(22, 17, 17, 26, 18, 20, bronzeLight);
box(23, 16, 18, 25, 17, 19, bronzeDark);
box(16, 20, 12, 32, 28, 16, leather);
for (let x = 17; x <= 31; x += 3) {
  box(x, 18, 12, x + 1, 19, 17, x % 2 ? leatherLight : leather);
  box(x, 18, 12, x + 1, 18, 12, bronzeDark);
}
box(19, 18, 15, 29, 18, 16, red);
box(21, 17, 14, 27, 17, 15, redLight);

// Shield-side arm and its leather shoulder guard.
ellipsoid(14, 24, 27, 4, 4, 5, skin);
line(13, 22, 25, 11, 18, 21, 2, skin);
ellipsoid(14, 23, 30, 5, 5, 3, leather);
ellipsoid(14, 22, 31, 4, 4, 2, leatherLight);
box(10, 19, 29, 15, 19, 30, bronzeDark);
box(11, 18, 29, 14, 18, 29, bronzeLight);

// Neck and friendly face.
ellipsoid(24, 22, 35, 6, 5, 5, skin);
box(21, 17, 32, 27, 18, 35, skinLight);
box(22, 16, 32, 26, 16, 32, skinDark);
set(21, 16, 35, "#322b27");
set(27, 16, 35, "#322b27");
set(21, 15, 35, "#fff2d1");
set(27, 15, 35, "#fff2d1");

// Bronze helmet, cheek plates, and boldly spaced visor bars.
ellipsoid(24, 22, 39, 7, 6, 3, bronze);
ellipsoid(24, 21, 40, 6, 5, 2, bronzeLight);
box(17, 17, 37, 31, 19, 38, bronzeDark);
box(18, 16, 37, 30, 16, 37, bronzeLight);
box(17, 17, 32, 19, 19, 37, bronze);
box(29, 17, 32, 31, 19, 37, bronze);
box(19, 15, 32, 29, 15, 32, bronzeDark);
for (const x of [20, 23, 26, 29]) {
  box(x, 15, 33, x, 15, 37, bronzeLight);
}
box(23, 14, 36, 25, 15, 37, bronzeLight);
set(24, 14, 37, "#57b4ae");

// Tall, transverse scarlet crest.
box(17, 21, 41, 31, 24, 42, bronzeDark);
for (let x = 16; x <= 32; x++) {
  const height = 43 + (x > 19 && x < 30 ? 2 : 0);
  box(x, 21, 42, x, 24, height, x % 3 === 0 ? redLight : red);
  set(x, 21, height, redLight);
}

// Round shield facing the viewer, with a thick rim and central boss.
for (let x = 5; x <= 17; x++) {
  for (let z = 15; z <= 29; z++) {
    const d = Math.sqrt(((x - 11) / 6.5) ** 2 + ((z - 22) / 7.5) ** 2);
    if (d <= 1) {
      box(x, 13, z, x, 15, z, d > 0.78 ? bronzeDark : red);
      set(x, 12, z, d > 0.79 ? bronzeLight : (z > 22 ? redLight : red));
      if (d > 0.71 && d < 0.9) set(x, 11, z, bronzeLight);
    }
  }
}
for (const [x, z] of [[11, 16], [6, 22], [16, 22], [11, 28]]) {
  set(x, 10, z, bronzeLight);
}
ellipsoid(11, 10, 22, 3, 2, 3, bronze);
ellipsoid(11, 8, 22, 1, 1, 1, bronzeLight);

// The other arm, trident, and hand swing together from the shoulder.
part("tridentArm", [33, 23, 29]);
ellipsoid(34, 23, 28, 3, 3, 4, skin);
line(35, 21, 27, 38, 18, 21, 2, skin);
ellipsoid(39, 17, 20, 2, 2, 2, skinLight);
box(38, 16, 19, 40, 17, 20, skinDark);

// Long bronze shaft and three unmistakable prongs.
box(39, 16, 9, 40, 17, 38, bronzeDark);
box(39, 15, 10, 39, 15, 38, bronzeLight);
box(38, 15, 35, 41, 17, 37, bronzeLight);
line(39, 16, 37, 35, 16, 40, 1, bronze);
line(40, 16, 37, 44, 16, 40, 1, bronze);
for (const x of [35, 40, 44]) {
  box(x, 16, 39, x, 17, 43, bronze);
  box(x, 15, 40, x, 15, 43, bronzeLight);
  set(x, 16, 44, bronzeLight);
}
animate("tridentArm", { type: "swing", axis: "x", speed: 3, amplitude: 0.5 });