fogón

← Casa completaObjeto 3Dfogon/cuadro-de-paisaje

Cuadro de paisaje

de fogonCC09960 bloques
Cuadro de paisajeArrastrá para girarlo
// «Cuadro de paisaje» · gpt-6-sol (medium)
// A framed landscape painting on a small easel: a thick golden frame around a painting of green hills, a blue sky with a white cloud and a yellow sun, resting on a three-legged wooden easel.

// Three-legged easel, standing behind the painting.
const walnut = "#875737";
const walnutLight = "#aa7447";
const walnutDark = "#65412d";
const honey = "#c28b54";

line(24, 23, 33, 12, 21, 0, 1.5, walnut);
line(24, 23, 33, 36, 21, 0, 1.5, walnut);
line(24, 25, 34, 24, 35, 0, 1.6, walnutDark);
line(23, 21, 42, 23, 21, 10, 1.4, honey);
line(22, 20, 42, 22, 20, 11, 0, walnutLight);
box(21, 20, 42, 25, 24, 45, walnut);
box(22, 19, 43, 24, 20, 45, honey);

// Wooden cross brace and the little shelf supporting the frame.
box(13, 19, 9, 35, 22, 11, walnutDark);
box(13, 18, 11, 35, 20, 12, walnutLight);
box(6, 12, 10, 41, 22, 12, walnut);
box(6, 10, 11, 41, 12, 13, honey);
box(7, 9, 12, 40, 10, 13, walnutLight);
box(7, 10, 13, 40, 10, 13, "#e0ae70");

// Solid backing, with a recessed painted surface.
box(9, 16, 15, 38, 19, 40, walnutDark);
box(11, 15, 17, 36, 15, 38, "#b6dddf");

// Paint the sky and rolling hills one little square at a time.
for (let x = 11; x <= 36; x++) {
  for (let z = 17; z <= 38; z++) {
    let color;
    if (z >= 33) color = "#91cdec";
    else if (z >= 27) color = "#a8d9ef";
    else color = "#c4e5e2";

    const farHill = Math.round(25 + 2 * Math.sin((x - 9) * 0.31));
    const nearHill = Math.round(21 + 2 * Math.sin((x + 3) * 0.27));
    if (z <= farHill) color = (x + z) % 5 === 0 ? "#9fca91" : "#abd69a";
    if (z <= nearHill) color = (x + z) % 6 === 0 ? "#65a96d" : "#78b979";
    if (z <= 18) color = "#5e9c62";

    set(x, 14, z, color);
  }
}

// A round sun and one fluffy, chunky cloud, on the front of the canvas.
for (let x = 28; x <= 34; x++)
  for (let z = 32; z <= 38; z++)
    if ((x - 31) ** 2 + (z - 35) ** 2 <= 8)
      set(x, 13, z, z >= 36 ? "#ffe9a0" : "#f7cd65");

for (let x = 13; x <= 24; x++) {
  for (let z = 30; z <= 36; z++) {
    const puff =
      ((x - 16) / 3) ** 2 + ((z - 32) / 2) ** 2 <= 1 ||
      ((x - 19) / 3) ** 2 + ((z - 34) / 2.5) ** 2 <= 1 ||
      ((x - 22) / 2.5) ** 2 + ((z - 32) / 2) ** 2 <= 1;
    if (puff) set(x, 13, z, z <= 31 ? "#e8f2ed" : "#fff9e9");
  }
}

// Tiny flowers in the foreground.
for (const [x, z] of [[16, 19], [27, 20], [32, 18]]) {
  set(x, 13, z, "#f8e9af");
  set(x - 1, 13, z, "#fff5dc");
  set(x + 1, 13, z, "#fff5dc");
}

// Deep golden frame: dark sides, broad honey-gold face, raised bright molding.
const frame = (y0, y1, outer, inner, color) => {
  const [xl, xr, zb, zt] = outer;
  const [il, ir, ib, it] = inner;
  box(xl, y0, zb, xr, y1, ib - 1, color);
  box(xl, y0, it + 1, xr, y1, zt, color);
  box(xl, y0, ib, il - 1, y1, it, color);
  box(ir + 1, y0, ib, xr, y1, it, color);
};
frame(14, 18, [7, 40, 13, 42], [11, 36, 17, 38], "#a46a31");
frame(12, 14, [7, 40, 13, 42], [11, 36, 17, 38], "#d59b41");
frame(11, 12, [7, 40, 13, 42], [11, 36, 17, 38], "#efbd61");

// Slim contrasting rims give the frame its carved, toy-like depth.
box(7, 10, 13, 40, 10, 13, "#ffe09a");
box(7, 10, 42, 40, 10, 42, "#ffe09a");
box(7, 10, 14, 7, 10, 41, "#ffe09a");
box(40, 10, 14, 40, 10, 41, "#f4c773");
box(10, 12, 17, 10, 12, 38, "#ad7535");
box(37, 12, 17, 37, 12, 38, "#ad7535");
box(11, 12, 16, 36, 12, 16, "#ad7535");
box(11, 12, 39, 36, 12, 39, "#f9d47b");

for (const x of [8, 39])
  for (const z of [14, 41])
    set(x, 10, z, "#fff0ad");