fogón

← City3D assetfogon/edificio-de-departamentos

Edificio de departamentos

by fogonCC036347 blocks
Edificio de departamentosDrag to turn it
// «Edificio de departamentos» · gpt-6-sol (medium)
// A six-story apartment building: a tall boxy block with a light beige facade, rows of windows with small balconies with glass and metal railings on every floor, a few balconies with plants and an air conditioner, a glass lobby entrance at the ground floor front (-y) with the building number above, and a rooftop with a water tank and an antenna.

// Six-story apartment building, front facing -y.
const beige = "#ead7b6";
const cream = "#f5e6ca";
const shade = "#d4bf9e";
const concrete = "#bcb8ad";
const iron = "#385b51";
const glass = "#83bcc5";
const darkGlass = "#417685";

box(8, 12, 0, 39, 36, 37, beige);

// Subtle variation on the large exterior walls.
for (let z = 1; z <= 37; z++) {
  for (let x = 8; x <= 39; x++) {
    if (rand() < 0.075) set(x, 12, z, rand() < 0.5 ? cream : shade);
  }
  for (let y = 13; y <= 36; y++) {
    if (rand() < 0.09) set(39, y, z, rand() < 0.5 ? cream : shade);
    if (rand() < 0.07) set(8, y, z, shade);
  }
}

// Corner pilasters, brick accents, and horizontal floor lines.
for (const x of [8, 39]) {
  box(x, 11, 0, x, 11, 37, "#c98668");
  for (let z = 2; z < 37; z += 3) set(x, 10, z, "#ad6d56");
}
for (const z of [6, 12, 18, 24, 30, 36]) {
  box(9, 11, z, 38, 11, z, shade);
  box(8, 12, z, 39, 36, z, "#dfcaab");
}

// Six rows of chunky, framed windows.
for (let floor = 0; floor < 6; floor++) {
  const bottom = floor * 6 + 2;
  for (const [x0, x1] of [[11, 15], [21, 25], [31, 35]]) {
    if (floor === 0 && x0 === 21) continue;
    box(x0 - 1, 10, bottom - 1, x1 + 1, 11, bottom + 4, cream);
    box(x0, 9, bottom, x1, 10, bottom + 3, darkGlass);
    box(x0, 8, bottom + 2, x1, 8, bottom + 2, glass);
    box(Math.floor((x0 + x1) / 2), 8, bottom,
        Math.floor((x0 + x1) / 2), 8, bottom + 3, iron);
    box(x0 - 1, 8, bottom - 1, x1 + 1, 9, bottom - 1, "#c9afa0");
  }

  // Two windows on the visible right wall.
  for (const y of [18, 28]) {
    box(40, y - 1, bottom - 1, 40, y + 3, bottom + 4, cream);
    box(41, y, bottom, 41, y + 2, bottom + 3, darkGlass);
    box(41, y, bottom + 2, 41, y + 2, bottom + 2, glass);
    set(41, y + 1, bottom + 1, iron);
  }
}

// Balconies on every level, including small ground-floor terraces.
for (let floor = 0; floor < 6; floor++) {
  const base = floor * 6;
  for (const [left, right] of [[9, 17], [29, 38]]) {
    box(left, 8, base, right, 12, base, concrete);
    box(left, 8, base + 1, right, 11, base + 1, "#e6ded0");

    // Transparent glass panels and dark green iron posts.
    box(left, 7, base + 2, right, 7, base + 3, glass);
    box(left, 7, base + 1, right, 7, base + 1, iron);
    box(left, 7, base + 4, right, 7, base + 4, iron);
    for (const x of [left, left + 4, right]) {
      box(x, 7, base + 1, x, 7, base + 4, iron);
    }
    box(left, 8, base + 1, left, 11, base + 3, iron);
    box(right, 8, base + 1, right, 11, base + 3, iron);
  }
}

// Planters bring color to a few balconies.
for (const [x, floor] of [[11, 1], [35, 2], [14, 4], [32, 5]]) {
  const z = floor * 6 + 2;
  box(x, 9, z, x + 2, 10, z + 1, "#c87856");
  box(x, 9, z + 2, x + 2, 10, z + 2, "#437a50");
  set(x + 1, 9, z + 3, "#65a65b");
  set(x, 9, z + 3, "#efb65e");
}

// Two compact wall-mounted air conditioners.
for (const floor of [2, 4]) {
  const z = floor * 6 + 3;
  box(26, 9, z, 28, 10, z + 2, "#e4e4d8");
  box(26, 8, z, 28, 8, z + 1, "#9ba5a3");
  for (let x = 26; x <= 28; x++) set(x, 7, z, "#50616a");
}

// Glass lobby entrance and its little step.
box(18, 10, 0, 29, 11, 5, "#b8a38c");
box(19, 9, 0, 28, 9, 4, iron);
box(20, 8, 0, 27, 8, 4, darkGlass);
box(23, 7, 0, 23, 8, 4, iron);
box(20, 7, 3, 27, 7, 3, glass);
set(22, 7, 2, "#e7d7a0");
set(25, 7, 2, "#e7d7a0");
box(18, 7, 0, 29, 9, 0, "#d2c8b5");
box(18, 7, 5, 29, 10, 5, "#c98668");

// Building number 247, in chunky three-by-three lettering.
box(18, 7, 6, 30, 9, 8, "#385b51");
const digits = [
  ["111", "011", "110"], // 2
  ["101", "111", "001"], // 4
  ["111", "001", "001"]  // 7
];
digits.forEach((rows, i) => {
  rows.forEach((row, j) => {
    for (let k = 0; k < 3; k++) {
      if (row[k] === "1") set(19 + i * 4 + k, 6, 8 - j, "#ffe2a0");
    }
  });
});

// Flat roof, raised parapet, rooftop water tank, and antenna.
box(8, 12, 38, 39, 36, 38, "#aaa9a1");
box(8, 11, 38, 39, 12, 40, cream);
box(8, 36, 38, 39, 37, 40, shade);
box(8, 12, 39, 9, 36, 40, cream);
box(38, 12, 39, 39, 36, 40, shade);

box(27, 24, 39, 35, 32, 40, iron);
cylinder(31, 28, 40, 3, 5, "#658c9a");
cylinder(31, 28, 45, 3, 1, "#365766");

box(13, 28, 39, 14, 29, 40, concrete);
line(13, 28, 40, 13, 28, 45, 0, iron);
line(11, 28, 43, 15, 28, 43, 0, iron);
set(13, 28, 45, "#df775e");