fogón

← Basics3D assetfogon/mesa-en-c

Mesa en C

by fogonCC016317 blocks
Mesa en CDrag to turn it
// «Mesa en C» · gpt-6-sol (medium)
// C shaped table («Mesa en C»).

// A warm wooden C-shaped table, with a book and a pencil mug on top.
const wood = ["#bd7442", "#c77b45", "#ce8249", "#d5894e"];
const dark = "#925532";
const grain = "#a96438";

// Low shelf: the bottom stroke of the C.
box(9, 9, 0, 39, 41, 2, dark);
box(9, 10, 2, 39, 41, 3, "#ae683a");
box(10, 11, 4, 38, 40, 4, "#cc8048");

// Upright back panel, solid enough to support the overhanging top.
box(9, 8, 3, 39, 13, 30, "#ad663a");
box(10, 8, 5, 38, 8, 28, "#bd7542");
box(10, 13, 5, 38, 13, 29, "#c47a43");

// Broad, thin tabletop.
box(9, 12, 30, 39, 42, 32, "#a76339");
box(9, 15, 33, 39, 42, 33, "#c57a42");

// The exposed back edge rises in a few shallow, layered steps.
box(9, 8, 27, 39, 10, 29, "#a45f35");
box(9, 10, 29, 39, 12, 31, "#b66c3a");
box(9, 12, 31, 39, 15, 33, "#c37840");

// Long planks and gently varied grain across the three wooden surfaces.
for (let x = 10; x <= 38; x++) {
  const plank = Math.floor((x - 10) / 5);
  const c = wood[plank % wood.length];

  for (let y = 16; y <= 41; y++)
    set(x, y, 34, c);

  for (let y = 12; y <= 40; y++)
    set(x, y, 4, wood[(plank + 1) % wood.length]);

  // Vertical boards on the outside of the upright.
  for (let z = 5; z <= 27; z++)
    set(x, 7, z, wood[(plank + 2) % wood.length]);
}

// Fine, subdued joints between boards.
for (let x = 14; x <= 35; x += 5) {
  for (let y = 17; y <= 41; y++) {
    if (rand() > 0.19) set(x, y, 34, "#b26a3b");
  }
  for (let y = 12; y <= 40; y++) {
    if (rand() > 0.24) set(x, y, 4, "#ad6639");
  }
  for (let z = 5; z <= 27; z++)
    if (rand() > 0.12) set(x, 7, z, "#a45f36");
}

// Sparse irregular wood fibers, kept lighter than the board joints.
for (let i = 0; i < 115; i++) {
  const x = 11 + Math.floor(rand() * 27);
  const y = 17 + Math.floor(rand() * 23);
  const z = rand() < 0.55 ? 34 : 4;
  const yy = z === 34 ? y : Math.min(y, 39);
  const shade = rand() < 0.55 ? "#da8c51" : "#b96f3d";
  for (let t = 0; t < 2 + Math.floor(rand() * 4); t++)
    set(x, Math.min(41, yy + t), z, shade);
}
for (let i = 0; i < 65; i++) {
  const x = 10 + Math.floor(rand() * 29);
  const z = 6 + Math.floor(rand() * 21);
  set(x, 7, z, rand() < 0.5 ? "#d0874d" : grain);
  if (rand() < 0.55) set(x, 7, z + 1, "#bd7441");
}

// Warm layered rims, especially visible along the open side.
box(9, 42, 30, 39, 42, 30, "#92542f");
box(9, 42, 31, 39, 42, 31, "#a76439");
box(9, 42, 32, 39, 42, 32, "#b66d3c");
box(9, 41, 33, 39, 41, 33, "#db8b4e");
box(9, 41, 0, 39, 41, 0, "#854c2d");
box(9, 41, 2, 39, 41, 2, "#a76136");
box(10, 40, 4, 38, 40, 4, "#d8894d");
box(9, 8, 4, 39, 8, 4, "#89502e");
box(9, 8, 27, 39, 8, 27, "#8f522f");

// A closed, deep teal book resting flat on the tabletop.
box(17, 20, 35, 32, 30, 36, "#153c43");
box(18, 20, 37, 32, 30, 37, "#20565b");
box(17, 21, 38, 31, 30, 38, "#28676a");
box(17, 20, 36, 32, 20, 36, "#102e37");
box(19, 20, 36, 30, 20, 36, "#d4cbb1"); // page edges
box(18, 21, 37, 31, 21, 37, "#17444c");

// Two short pale lines on the cover.
box(22, 23, 39, 27, 23, 39, "#d9d8b9");
box(21, 25, 39, 28, 25, 39, "#b7d0b9");

// Small brown pencil lying beside the book.
line(32, 23, 35, 37, 23, 35, 0, "#7f4930");
set(37, 23, 35, "#e5b779");
set(33, 23, 35, "#d19856");

// Ribbed ivory pencil cup, behind the book.
box(17, 34, 35, 24, 40, 41, "#bcb4a0");
box(18, 34, 36, 23, 34, 41, "#d6cdb8");
box(17, 35, 36, 17, 39, 41, "#a69e8d");
box(18, 35, 42, 23, 39, 42, "#e2dac5");
box(19, 36, 42, 22, 38, 42, "#59564b");
for (let x of [18, 20, 22, 24])
  box(x, 34, 36, x, 34, 40, x === 24 ? "#eee4cd" : "#b9b19d");

// Pale angular handle on the right.
box(25, 36, 39, 27, 36, 41, "#e5ddca");
box(27, 36, 37, 27, 36, 41, "#d2cab6");
box(25, 36, 37, 27, 36, 37, "#c3bba8");
set(26, 36, 39, null);

// A few dark pencil tips showing above the cup.
for (const [x, y, c] of [
  [19, 36, "#67594b"], [21, 37, "#876b4d"],
  [23, 36, "#524c43"], [20, 39, "#78604d"]
]) {
  set(x, y, 43, c);
}