fogón

← Asian3D assetfogon/templo-chino

Templo chino

by fogonCC027167 blocks
Templo chinoDrag to turn it
// «Templo chino» · gpt-6-sol (medium)
// A Chinese temple hall on a raised white stone platform with front stairs, red columns, carved gold and blue beams under the eaves, and a big double-curved roof of glazed yellow-orange tiles with small dragon ornaments on the ridge ends.

// White-stone terrace and broad front stair
box(5, 10, 0, 42, 41, 3, "#b7b9b1");
box(5, 10, 4, 42, 41, 4, "#eee9d9");
box(5, 10, 2, 42, 10, 2, "#d9d8ce");
box(5, 41, 2, 42, 41, 2, "#d9d8ce");
for (let y = 2; y <= 9; y++) {
  const height = Math.floor((y - 2) / 2);
  box(17, y, 0, 30, y, height, "#c9c9be");
  box(17, y, height, 30, y, height, "#eeeade");
  set(17, y, height, "#faf5e7");
  set(30, y, height, "#faf5e7");
}
// Stair-side stone rails
for (const x of [15, 32]) {
  for (let y = 3; y <= 10; y++) {
    const h = Math.min(4, Math.floor((y - 2) / 2));
    box(x, y, 0, x, y, h + 1, "#b9bab1");
    set(x, y, h + 1, "#f0ede0");
  }
  box(x - 1, 3, 1, x + 1, 4, 2, "#e6e3d7");
  sphere(x, 3, 3, 1, "#f4efdf");
}

// Terrace balustrade, with an opening at the stairs
for (let y = 12; y <= 39; y += 5) {
  for (const x of [6, 41]) {
    box(x, y, 5, x, y, 7, "#e4e1d6");
    set(x, y, 8, "#f8f2e4");
  }
}
for (let x = 7; x <= 40; x++) {
  if (x < 16 || x > 31) {
    box(x, 10, 5, x, 10, 6, "#d9d8ce");
    if (x % 5 === 2) set(x, 10, 7, "#f6f0e2");
  }
}

// Recessed timber hall and raised porch
box(8, 15, 5, 39, 37, 21, "#5b3029");
box(9, 15, 6, 38, 15, 20, "#783b2d");
box(8, 11, 5, 39, 15, 5, "#e2d8bf");
for (let y = 13; y <= 37; y += 5) {
  box(8, y, 6, 8, y, 20, "#a43429");
  box(39, y, 6, 39, y, 20, "#a43429");
}

// Jade lattice windows on the front
for (const [a, b] of [[10, 16], [32, 38]]) {
  box(a, 14, 8, b, 14, 18, "#341f23");
  box(a + 1, 13, 9, b - 1, 13, 17, "#345d51");
  for (let x = a + 2; x < b; x += 2)
    box(x, 12, 9, x, 12, 17, "#b88436");
  for (let z = 11; z <= 17; z += 3)
    box(a + 1, 12, z, b - 1, 12, z, "#c79743");
  box(a, 12, 8, b, 12, 8, "#d9a347");
  box(a, 12, 18, b, 12, 18, "#d9a347");
}
for (const x of [18, 29]) {
  box(x, 13, 7, x, 13, 20, "#a33328");
  box(x, 12, 9, x, 12, 17, "#d6a044");
}

// Tall central double doors
box(20, 14, 6, 27, 14, 19, "#281e21");
box(21, 13, 7, 23, 13, 18, "#654035");
box(24, 13, 7, 26, 13, 18, "#654035");
for (const x of [21, 24]) {
  box(x, 12, 9, x + 2, 12, 10, "#30584e");
  box(x, 12, 14, x + 2, 12, 16, "#30584e");
  box(x, 12, 18, x + 2, 12, 18, "#c99b48");
}
set(23, 11, 12, "#f5cf68");
set(24, 11, 12, "#f5cf68");
box(19, 12, 19, 28, 13, 20, "#d6a044");
box(20, 11, 20, 27, 11, 20, "#254f56");

// Visible side-wall lattice bays
for (const x of [8, 39]) {
  for (const y of [20, 28]) {
    box(x, y, 9, x, y + 4, 17, "#31544c");
    for (let yy = y; yy <= y + 4; yy += 2)
      box(x + (x === 8 ? -1 : 1), yy, 9,
          x + (x === 8 ? -1 : 1), yy, 17, "#c38c3c");
    for (const z of [10, 14, 17])
      box(x + (x === 8 ? -1 : 1), y, z,
          x + (x === 8 ? -1 : 1), y + 4, z, "#bd903e");
  }
}

// Lacquer columns, gold bases and capitals
for (const y of [12, 36]) {
  for (const x of [9, 17, 31, 39]) {
    box(x - 1, y - 1, 5, x + 1, y + 1, 6, "#d5aa55");
    box(x, y, 7, x + 1, y + 1, 22, "#ae2d24");
    box(x, y, 8, x, y, 21, "#da5032");
    box(x - 1, y - 1, 22, x + 2, y + 2, 23, "#e2ac43");
    box(x - 1, y - 1, 24, x + 2, y + 2, 24, "#255466");
  }
}

// Layered, painted bracket-work beneath all four eaves
box(6, 10, 22, 41, 10, 23, "#86362d");
box(6, 11, 24, 41, 11, 25, "#24556a");
box(7, 38, 23, 40, 39, 25, "#25586b");
for (const y of [10, 39]) {
  for (let x = 7; x <= 40; x += 4) {
    box(x, y, 21, x + 1, y, 23, "#d9a844");
    set(x, y - (y === 10 ? 1 : -1), 23, "#efc45c");
    set(x + 2, y, 24, "#f2c864");
  }
}
for (const x of [6, 41]) {
  box(x, 11, 24, x, 39, 25, "#245568");
  for (let y = 13; y < 39; y += 4)
    box(x, y, 22, x, y + 1, 23, "#e8b54d");
}
for (let x = 8; x <= 39; x++) {
  if (x % 4 === 0) {
    box(x, 9, 24, x + 1, 11, 25, "#e5ad40");
    set(x, 9, 23, "#285b69");
  }
}
box(8, 9, 26, 39, 10, 26, "#71382d");

// Curving hip roof: low sweeping slopes, then sharply upturned eaves.
const across = [30, 29, 27, 27, 28, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39];
const slope = [39, 39, 38, 37, 36, 35, 35, 34, 33, 32,
               31, 30, 29, 29, 28, 28, 27, 27, 29, 30];
function roofZ(x, y) {
  const edge = Math.min(x - 2, 45 - x);
  return Math.min(across[Math.min(14, edge)], slope[Math.abs(y - 24)]);
}
for (let x = 2; x <= 45; x++) {
  for (let y = 6; y <= 43; y++) {
    const z = roofZ(x, y);
    box(x, y, z - 2, x, y, z - 1, "#69402d");
    const row = Math.floor(y / 3);
    let tile = "#e7a335";
    if (x % 3 === 0) tile = "#f7c555";
    else if (row % 2 === 0) tile = "#d88529";
    if (rand() < 0.075) tile = "#f8d16d";
    set(x, y, z, tile);
    if (x % 3 === 0 && y % 3 === 1)
      set(x, y, z + 1, "#ffd46a");
    if (y % 3 === 0 && x % 3 !== 0)
      set(x, y, z + 1, "#a95a27");
  }
}

// Dark-green glazed underside and gilded lip
for (let x = 2; x <= 45; x++) {
  for (const y of [6, 43]) {
    const z = roofZ(x, y);
    set(x, y, z - 2, "#244d49");
    set(x, y, z + 1, "#efb84a");
  }
}
for (let y = 6; y <= 43; y++) {
  for (const x of [2, 45]) {
    const z = roofZ(x, y);
    set(x, y, z - 2, "#244d49");
    set(x, y, z + 1, "#f5bd4f");
  }
}

// Four strong diagonal hip ridges
for (const side of [-1, 1]) {
  for (const back of [-1, 1]) {
    for (let i = 0; i <= 13; i++) {
      const x = side < 0 ? 16 - i : 31 + i;
      const y = 24 + back * Math.round(i * 1.2);
      const z = roofZ(x, y);
      box(x, y, z + 1, x, y, z + 2, "#d17b2a");
      set(x, y, z + 2, "#f9ca58");
    }
  }
}

// High ornamental ridge and end dragons
box(15, 23, 39, 32, 25, 40, "#ae5e25");
box(16, 24, 41, 31, 24, 41, "#f8cf63");
for (let x = 17; x <= 30; x += 3)
  set(x, 24, 42, "#efb744");

for (const side of [-1, 1]) {
  const tip = side < 0 ? 8 : 39;
  const inward = side < 0 ? 1 : -1;
  // Arched body and curling tail
  box(tip + inward, 23, 36, tip + inward * 3, 25, 37, "#b66b29");
  line(tip + inward * 2, 24, 38, tip + inward * 5, 24, 40, 0, "#e6aa42");
  set(tip + inward * 5, 24, 41, "#f7d16a");
  // Raised snout, crest, horns and a dark eye
  box(tip - inward, 23, 37, tip, 25, 39, "#e2a23b");
  set(tip - inward * 2, 24, 38, "#f6c65a");
  set(tip - inward, 23, 40, "#f5c955");
  set(tip, 25, 41, "#f5c955");
  set(tip - inward, 22, 39, "#2b3832");
  set(tip - inward * 2, 24, 36, "#ebba55");
}

// Finials at the four lifted roof corners
for (const x of [2, 45]) {
  for (const y of [6, 43]) {
    const z = roofZ(x, y);
    box(x, y, z + 1, x, y, z + 3, "#dd973c");
    set(x, y, z + 4, "#ffdc72");
  }
}