fogón

← Casa completaObjeto 3Dfogon/sofa-esquinero

Sofá esquinero

de fogonCC011058 bloques
Sofá esquineroArrastrá para girarlo
// «Sofá esquinero» · gpt-6-sol (medium)
// An L-shaped corner sofa in soft grey-blue fabric: a long three-seat section along x and a chaise section coming forward toward -y on the left, with low thick armrests, a row of back cushions and three colorful throw pillows (orange, mint, mustard). Short dark wooden feet.

// Soft grey-blue L-shaped corner sofa, facing -y.
const fabric = {
  shadow: "#718b9b",
  base: "#8fa9b9",
  side: "#9fb8c6",
  top: "#b8cdd7",
  light: "#c7d8df",
  seam: "#7894a4"
};
const walnut = { dark: "#503a30", mid: "#765343", light: "#967058" };

// A filled cushion with gently clipped corners and a lighter upper surface.
function cushion(x0, y0, z0, x1, y1, z1, sides, top) {
  for (let z = z0; z <= z1; z++)
    for (let y = y0; y <= y1; y++)
      for (let x = x0; x <= x1; x++) {
        const xe = x === x0 || x === x1;
        const ye = y === y0 || y === y1;
        if (xe && ye) continue;
        if (z === z1 && (xe || ye)) continue;
        set(x, y, z, z === z1 ? top : sides);
      }
}

// Short, sturdy wooden feet.
for (const [x, y] of [
  [9, 10], [16, 10], [9, 30], [17, 34],
  [23, 34], [37, 34], [38, 19], [29, 19]
]) {
  box(x, y, 0, x + 2, y + 2, 2, walnut.dark);
  box(x, y, 2, x + 2, y + 2, 3, walnut.mid);
  line(x, y, 1, x + 1, y, 2, 0, walnut.light);
}

// The solid L-shaped upholstered foundation.
box(7, 18, 3, 41, 36, 9, fabric.shadow);
box(7, 8, 3, 19, 35, 9, fabric.shadow);
box(8, 18, 5, 40, 35, 9, fabric.base);
box(8, 9, 5, 18, 34, 9, fabric.base);

// Continuous tall back, with a softly capped top rail.
box(7, 34, 8, 41, 37, 19, fabric.base);
box(8, 35, 19, 40, 37, 20, fabric.side);
box(9, 35, 20, 39, 36, 20, fabric.top);
box(8, 34, 9, 40, 34, 17, fabric.side);

// Thick, low arms: the left one runs along the chaise.
box(5, 8, 7, 8, 34, 12, fabric.base);
cushion(5, 7, 12, 9, 34, 14, fabric.side, fabric.top);
box(40, 18, 7, 43, 36, 12, fabric.base);
cushion(39, 17, 12, 43, 36, 14, fabric.side, fabric.top);
box(6, 9, 13, 7, 32, 13, fabric.light);
box(41, 19, 13, 42, 34, 13, fabric.light);

// Chaise pad and the two individual seats beside it.
cushion(9, 9, 9, 19, 32, 12, fabric.side, fabric.top);
cushion(20, 19, 9, 29, 32, 12, fabric.side, fabric.top);
cushion(30, 19, 9, 39, 32, 12, fabric.side, fabric.top);

// Piping along the visible front edges and chaise nose.
line(10, 9, 11, 18, 9, 11, 0, fabric.light);
line(10, 10, 11, 10, 29, 11, 0, fabric.light);
line(21, 19, 11, 28, 19, 11, 0, fabric.light);
line(31, 19, 11, 38, 19, 11, 0, fabric.light);
line(9, 8, 7, 18, 8, 7, 0, fabric.seam);
line(20, 18, 7, 39, 18, 7, 0, fabric.seam);

// Three plump back cushions, with readable gaps between them.
for (const [x0, x1] of [[9, 18], [20, 29], [31, 40]]) {
  cushion(x0, 31, 12, x1, 35, 19, fabric.side, fabric.light);
  line(x0 + 2, 31, 13, x1 - 2, 31, 13, 0, fabric.top);
  line(x0 + 2, 32, 19, x1 - 2, 32, 19, 0, fabric.top);
}

// Small patches of soft fabric variation, without mottling the trim.
forEach((x, y, z, color) => {
  if (color === fabric.base && rand() < 0.055) set(x, y, z, fabric.side);
  if (color === fabric.side && rand() < 0.035) set(x, y, z, fabric.top);
});

// Colorful throw pillows, upright against the back cushions.
function pillow(cx, cy, cz, dark, main, bright) {
  ellipsoid(cx, cy, cz, 4, 2, 4, dark);
  ellipsoid(cx, cy - 1, cz + 1, 3, 2, 3, main);
  box(cx - 2, cy - 3, cz, cx + 2, cy - 3, cz + 2, bright);
  set(cx, cy - 4, cz + 1, main); // central fabric-covered button
}
pillow(15, 28, 15, "#c87857", "#e99a73", "#f4b48b");
pillow(26, 28, 15, "#75aa9d", "#a2d4c0", "#c1e7d3");
pillow(36, 28, 15, "#bb8b3e", "#e0b755", "#f2d17b");