fogón

← BásicoObjeto 3Dfogon/farol-v5

Farol

de fogonCC020032 bloques
FarolArrastrá para girarlo
// «Farol» · gpt-6-sol (medium)
// Lantern («Farol»). One of several variations of this object: follow the reference picture closely.

const iron = "#252d31";
const dark = "#171f23";
const edge = "#344149";
const light = "#53616a";
const gold = "#b77a2e";
const brightGold = "#e5ae50";

// Broad, tiered foot of the lantern.
box(6, 6, 0, 41, 41, 1, dark);
box(5, 5, 1, 42, 42, 2, edge);
box(6, 6, 3, 41, 41, 4, iron);
box(8, 8, 5, 39, 39, 5, "#654d2d");
box(9, 9, 6, 38, 38, 6, "#b58442");
for (let x = 10; x <= 37; x++)
  for (let y = 10; y <= 37; y++)
    set(x, y, 6, rand() < 0.13 ? "#c69a57" : "#ac783b");

// Crisp horizontal metal edges around the foot.
for (let z of [0, 3, 5]) {
  let a = z === 0 ? 6 : 5, b = z === 0 ? 41 : 42;
  box(a, a, z, b, a + 1, z, z === 3 ? dark : edge);
  box(a, b - 1, z, b, b, z, dark);
  box(a, a, z, a + 1, b, z, light);
  box(b - 1, a, z, b, b, z, dark);
}
box(8, 8, 6, 39, 8, 7, "#624923");
box(8, 39, 6, 39, 39, 7, "#755329");
box(8, 8, 6, 8, 39, 7, gold);
box(39, 8, 6, 39, 39, 7, "#815a29");

// A small raised brass socket and the pale candle within.
box(19, 19, 7, 29, 29, 8, "#805723");
box(20, 20, 9, 28, 28, 9, "#d9a94c");
box(21, 21, 10, 27, 27, 10, "#f4cf76");
for (let x = 19; x <= 29; x++) {
  for (let y of [19, 29]) {
    if ((x + y) % 3 !== 0) set(x, y, 9, brightGold);
  }
}
for (let y = 20; y <= 28; y++) {
  for (let x of [19, 29]) {
    if ((x + y) % 3 !== 0) set(x, y, 9, "#f0c769");
  }
}
box(22, 22, 11, 26, 26, 19, "#e4d6a9");
box(22, 22, 11, 22, 26, 19, "#b8aa88");
box(26, 22, 11, 26, 26, 19, "#f5e4b5");
box(23, 22, 18, 25, 22, 19, "#fff0c6");
box(23, 23, 20, 25, 25, 21, "#e0a948");
set(24, 24, 22, "#ffe39a");
set(24, 24, 23, "#fff0ae");
set(24, 24, 24, "#e9a842");

// Four sturdy, open-frame corner uprights.
for (let x of [7, 39]) for (let y of [7, 39]) {
  box(x - 1, y - 1, 6, x + 1, y + 1, 28, dark);
  box(x - 1, y - 1, 9, x - 1, y - 1, 27, light);
  box(x + 1, y - 1, 9, x + 1, y - 1, 27, edge);
  box(x - 1, y - 1, 7, x + 1, y + 1, 8, "#374146");
  box(x - 1, y - 1, 25, x + 1, y + 1, 27, "#313d42");
  set(x - 1, y - 1, 8, gold);
  set(x, y - 1, 26, "#9a682d");
}

// A few narrow blue-white glints suggest clear glass, without closing the windows.
for (let z = 12; z <= 24; z++) {
  if (z !== 17 && z !== 18) {
    set(11, 7, z, z % 4 === 0 ? "#9db6b9" : "#5d777e");
    set(37, 7, z, z % 5 === 0 ? "#b3c4bf" : "#60767a");
    set(7, 36, z, z % 4 === 1 ? "#a3b6b5" : "#536e75");
    set(40, 35, z, z % 5 === 1 ? "#aebbbb" : "#657b7e");
  }
}
set(12, 7, 23, "#b6c7c2");
set(36, 7, 15, "#c2d0c8");
set(7, 35, 20, "#bdcbc6");

// Deep overhanging eave and five stepped slate-metal roof courses.
const tiers = [
  [4, 43, 28, 30],
  [8, 39, 31, 32],
  [12, 35, 33, 34],
  [16, 31, 35, 36],
  [20, 27, 37, 38]
];
for (let i = 0; i < tiers.length; i++) {
  const [a, b, lo, hi] = tiers[i];
  box(a, a, lo, b, b, hi, i === 0 ? "#263138" : "#303b41");
  box(a + 1, a + 1, hi, b - 1, b - 1, hi,
      i % 2 ? "#47535a" : "#435058");
  box(a, a, lo, b, a, lo, dark);
  box(a, b, lo, b, b, lo, dark);
  box(a, a, hi, b, a, hi, "#58656b");
  box(a, a, hi, a, b, hi, "#58646a");
  box(a, b, hi, b, b, hi, "#28343a");
  box(b, a, hi, b, b, hi, "#263137");

  // Little warm rivets at the exposed corners of each course.
  if (i < 4) {
    for (let x of [a + 2, b - 2]) for (let y of [a + 2, b - 2]) {
      set(x, y, hi + 1, gold);
      set(x, y, hi + 2, "#e1a548");
    }
  }
}
box(5, 5, 27, 42, 6, 28, dark);
box(5, 41, 27, 42, 42, 28, dark);
box(5, 5, 27, 6, 42, 28, edge);
box(41, 5, 27, 42, 42, 28, dark);

// Small fitting beneath the upright hanging ring.
box(22, 22, 39, 26, 26, 39, dark);
box(23, 22, 40, 25, 25, 40, gold);

// Thick, hollow iron loop, standing vertically above the roof.
for (let x = 19; x <= 29; x++) {
  for (let z = 40; z <= 47; z++) {
    const d = ((x - 24) / 5.2) ** 2 + ((z - 43.4) / 4.1) ** 2;
    const hole = ((x - 24) / 2.7) ** 2 + ((z - 43.4) / 2.0) ** 2;
    if (d <= 1 && hole >= 1) {
      for (let y = 22; y <= 25; y++)
        set(x, y, z, y === 22 ? "#354147" : "#202a30");
      if (z >= 44 && x <= 24) set(x, 22, z, "#56636a");
      if (z <= 42 && x >= 25) set(x, 22, z, "#805d35");
    }
  }
}