fogón

← Monstruos y enemigosObjeto 3Dfogon/minotauro

Minotauro

de fogonCC016293 bloques
MinotauroArrastrá para girarlo
// «Minotauro» · gpt-6-sol (medium)
// A muscular cartoon minotaur on two legs facing -y: a bull head with big curved cream horns, a gold nose ring and glowing red eyes, dark brown fur, a broad bare chest, a leather kilt with metal plates, hooved feet, holding a big double-bladed axe.

const fur = "#493024", furLight = "#65402b", furDark = "#30221d";
const skin = "#a76843", skinLight = "#c48658", skinDark = "#78472f";
const leather = "#633b29", leatherLight = "#885337";
const iron = "#788693", ironLight = "#c4d2d5", ironDark = "#46525d";
const gold = "#edb941", goldLight = "#ffe180";

// Body and broad, bare chest.
ellipsoid(24, 25, 25, 12, 8, 10, furDark);
ellipsoid(24, 23, 26, 11, 8, 9, fur);
ellipsoid(19, 17, 29, 6, 3, 5, skin);
ellipsoid(29, 17, 29, 6, 3, 5, skin);
ellipsoid(19, 15, 30, 5, 2, 3, skinLight);
ellipsoid(29, 15, 30, 5, 2, 3, skinLight);
ellipsoid(24, 18, 22, 6, 3, 5, skinDark);
box(21, 14, 20, 27, 16, 25, skin);
line(24, 14, 32, 24, 15, 27, 0, skinDark);
line(20, 14, 25, 28, 14, 25, 0, skinDark);
line(21, 15, 22, 27, 15, 22, 0, skinLight);

// Waist belt and heavy leather kilt.
box(14, 19, 17, 34, 31, 19, leather);
box(14, 17, 18, 34, 19, 19, leatherLight);
box(16, 16, 17, 32, 17, 17, gold);
box(22, 15, 16, 26, 17, 20, gold);
box(23, 14, 17, 25, 14, 19, goldLight);
box(14, 18, 11, 34, 30, 17, leather);
box(16, 16, 11, 21, 18, 17, leatherLight);
box(22, 15, 10, 27, 18, 17, leather);
box(28, 16, 11, 33, 18, 17, leatherLight);
for (const x of [16, 22, 28, 33]) {
  box(x, 15, 11, x, 16, 16, furDark);
}
for (const x of [19, 25, 31]) {
  box(x - 2, 14, 13, x + 2, 15, 17, ironDark);
  box(x - 1, 13, 14, x + 1, 14, 17, iron);
  box(x, 12, 16, x, 12, 16, ironLight);
  set(x, 12, 14, gold);
}
box(17, 17, 10, 32, 27, 11, furDark);

// Legs move from their hips in opposite phases.
function leg(name, x, speed) {
  part(name, [x, 24, 14]);
  ellipsoid(x, 24, 11, 5, 5, 6, fur);
  ellipsoid(x, 24, 6, 4, 4, 5, furDark);
  box(x - 4, 17, 1, x + 4, 27, 4, fur);
  box(x - 4, 14, 0, x + 4, 25, 3, "#36332e");
  box(x - 3, 13, 1, x + 3, 16, 3, "#625b4c");
  // A split at the front makes each chunky foot read as a hoof.
  box(x, 13, 0, x, 15, 2, "#211f1d");
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
leg("leftLeg", 18, 4);
leg("rightLeg", 30, -4);
part("body");

// Static arm, clenched fist, and small shoulder fur tufts.
ellipsoid(12, 24, 29, 5, 6, 6, furDark);
ellipsoid(11, 22, 28, 5, 5, 6, fur);
line(11, 21, 27, 10, 18, 20, 3, fur);
ellipsoid(10, 17, 19, 4, 4, 4, furLight);
box(7, 15, 18, 12, 17, 20, furDark);
for (const x of [9, 12, 15]) {
  line(x, 17, 32, x - 1, 16, 29, 1, furLight);
}

// Bull head: broad forehead, pronounced muzzle, and pointed ears.
ellipsoid(24, 21, 36, 10, 8, 7, furDark);
ellipsoid(24, 19, 37, 9, 8, 6, fur);
ellipsoid(24, 14, 35, 7, 4, 5, furLight);
ellipsoid(12, 22, 38, 5, 3, 3, fur);
ellipsoid(36, 22, 38, 5, 3, 3, fur);
box(9, 19, 38, 13, 19, 39, skinDark);
box(35, 19, 38, 39, 19, 39, skinDark);

// Thick cream horns sweep outward, curl upward, then turn inward.
for (const side of [-1, 1]) {
  const X = d => 24 + side * d;
  line(X(8), 21, 40, X(12), 21, 41, 3, "#96764d");
  line(X(11), 21, 41, X(17), 21, 40, 3, "#d4b981");
  line(X(16), 21, 40, X(20), 21, 42, 2, "#eed8a4");
  line(X(20), 21, 42, X(20), 21, 45, 2, "#f4e5bc");
  line(X(20), 21, 45, X(18), 21, 46, 1, "#fff0cd");
}

// Brows frame bright, unmistakable eyes.
for (const x of [19, 29]) {
  box(x - 2, 10, 38, x + 2, 12, 39, furDark);
  box(x - 1, 9, 36, x + 1, 10, 38, "#721d23");
  box(x, 8, 37, x + 1, 9, 38, "#ff3c35");
  set(x, 8, 38, "#ffb26a");
}
ellipsoid(24, 10, 31, 7, 5, 4, skinDark);
ellipsoid(24, 8, 32, 6, 3, 3, skin);
box(18, 7, 31, 30, 7, 32, skinLight);
box(20, 5, 32, 21, 6, 33, furDark);
box(27, 5, 32, 28, 6, 33, furDark);
box(21, 6, 29, 27, 6, 29, skinDark);

// Gold nose ring, hanging visibly below the muzzle.
for (let a = 0; a <= 32; a++) {
  const t = a * Math.PI * 2 / 32;
  const x = Math.round(24 + 3 * Math.cos(t));
  const z = Math.round(28 + 3 * Math.sin(t));
  set(x, 4, z, z >= 28 ? goldLight : gold);
  set(x, 5, z, gold);
}
box(23, 4, 31, 25, 5, 31, goldLight);

// Axe arm and its weapon share the shoulder pivot.
part("axeArm", [36, 24, 29]);
ellipsoid(36, 23, 29, 5, 6, 6, furDark);
ellipsoid(37, 20, 27, 4, 5, 5, fur);
line(37, 20, 27, 39, 13, 23, 3, fur);
ellipsoid(39, 13, 23, 4, 4, 4, furLight);
box(37, 10, 21, 41, 12, 24, furDark);
for (const z of [21, 23]) box(38, 9, z, 40, 9, z, furLight);

// Long haft with leather grip and gold fittings.
box(38, 11, 13, 40, 13, 39, "#604333");
box(39, 10, 15, 39, 10, 39, "#a47849");
for (const z of [15, 17, 19, 21, 23, 25]) {
  box(38, 10, z, 40, 10, z, leather);
}
box(37, 10, 29, 41, 14, 30, gold);
box(37, 10, 39, 41, 14, 40, gold);
box(38, 11, 12, 40, 13, 13, ironDark);

// Two broad crescent-like blades, one on each side of the haft.
for (let z = 28; z <= 42; z++) {
  const distance = Math.abs(z - 35);
  if (distance > 7) continue;
  const inner = distance >= 5 ? 4 : 2;
  const outer = distance >= 5 ? 7 : distance >= 3 ? 6 : 5;
  for (const side of [-1, 1]) {
    for (let d = inner; d <= outer; d++) {
      const x = 39 + side * d;
      box(x, 10, z, x, 13, z, d === outer ? ironLight : ironDark);
      set(x, 9, z, d === outer ? "#e0eeeb" : iron);
      if (d === inner) set(x, 9, z, ironLight);
    }
  }
}
box(38, 9, 33, 40, 10, 37, ironDark);
box(39, 8, 34, 39, 8, 36, goldLight);
animate("axeArm", { type: "swing", axis: "x", speed: 3, amplitude: 0.5 });
part("body");

// Sparse surface flecks give the large fur shapes a little texture.
forEach((x, y, z, color) => {
  if ((color === fur || color === furDark) &&
      get(x, y - 1, z) === undefined && rand() < 0.065) {
    set(x, y, z, rand() < 0.65 ? furLight : furDark);
  }
});