fogón

← Casa completaObjeto 3Dfogon/pecera

Pecera

de fogonCC023056 bloques
PeceraArrastrá para girarlo
// «Pecera» · gpt-6-sol (medium)
// A rectangular fish tank on a small wooden cabinet: light blue water (glass edges a bit lighter), sand and pebbles on the bottom, green water plants, a little treasure chest, and two orange goldfish.

// A little wooden stand for the aquarium.
box(7, 15, 0, 10, 19, 5, "#a66b3c");
box(37, 15, 0, 40, 19, 5, "#a66b3c");
box(7, 31, 0, 10, 35, 5, "#966039");
box(37, 31, 0, 40, 35, 5, "#966039");

box(6, 14, 4, 41, 36, 14, "#b87a43");
box(7, 14, 5, 40, 15, 12, "#d69a58");
box(7, 35, 5, 40, 36, 12, "#986038");
box(6, 13, 13, 41, 37, 15, "#e0a65e");
box(6, 12, 14, 41, 37, 15, "#f0bb75");
box(7, 13, 15, 40, 36, 15, "#f7cc89");

// Cabinet doors, raised panels, and chunky brass pulls.
box(8, 12, 5, 23, 13, 12, "#87542f");
box(25, 12, 5, 39, 13, 12, "#87542f");
box(10, 11, 6, 21, 12, 11, "#d8a067");
box(27, 11, 6, 37, 12, 11, "#d8a067");
box(11, 10, 7, 20, 10, 10, "#e9b779");
box(28, 10, 7, 36, 10, 10, "#e9b779");
box(22, 9, 8, 23, 10, 9, "#f7d888");
box(25, 9, 8, 26, 10, 9, "#f7d888");
box(7, 12, 4, 40, 13, 4, "#85532f");
for (let x = 9; x <= 38; x++) {
  if (rand() < 0.22) set(x, 10, 6 + Math.floor(rand() * 5), "#dca972");
}

// Dark gasket and a thick, pale-blue glass floor.
box(5, 12, 16, 42, 37, 17, "#6b97a0");
box(6, 13, 17, 41, 36, 18, "#a9dce1");

// Sandy bed, uneven along its top.
box(8, 14, 19, 39, 35, 20, "#eed79a");
for (let x = 8; x <= 39; x++) {
  for (let y = 14; y <= 35; y++) {
    const r = rand();
    set(x, y, 20, r < 0.18 ? "#fff0bc" : r < 0.38 ? "#d8bc80" : "#eed79a");
    if (rand() < 0.055) set(x, y, 21, "#e9cf90");
  }
}

// The back and sides suggest clear, softly blue water while leaving the
// front open so all the tiny inhabitants remain visible.
box(8, 35, 21, 39, 36, 37, "#a8d9e8");
box(8, 35, 34, 39, 35, 37, "#b9e8f0");
for (let x = 9; x <= 38; x++) {
  for (let z = 22; z <= 35; z++) {
    if (rand() < 0.13) set(x, 34, z, rand() < 0.5 ? "#b8e4ed" : "#9bd2e3");
  }
}
box(7, 14, 19, 8, 35, 37, "#b8e5ed");
box(39, 14, 19, 40, 35, 37, "#b8e5ed");
box(8, 14, 37, 39, 35, 37, "#c5edf2");

// Rounded pebbles scattered across the sand.
const stones = [
  [11, 19, 2, "#b4a498"], [17, 27, 2, "#d2b5a0"],
  [23, 17, 1, "#9ab5af"], [34, 24, 2, "#c6a68d"],
  [38, 31, 1, "#a3ada1"], [14, 33, 2, "#e1c5a5"],
  [29, 16, 1, "#a4b9b2"], [20, 32, 1, "#c5a390"]
];
for (const [x, y, r, c] of stones) ellipsoid(x, y, 21, r, r, 1, c);

// Water plants: broad toy-like leaves and several reaching stems.
const plants = [
  [11, 30, 32], [15, 33, 29], [22, 32, 34],
  [35, 30, 33], [38, 27, 29]
];
for (const [x, y, top] of plants) {
  box(x - 1, y - 1, 20, x + 1, y + 1, 21, "#669b5e");
  line(x, y, 21, x, y, top, 0, "#3c9465");
  for (let z = 24; z < top; z += 3) {
    const side = ((z + x) % 2) ? 1 : -1;
    ellipsoid(x + side * 2, y, z, 2, 1, 1, "#55b579");
    set(x + side * 3, y, z, "#77cd8b");
  }
  ellipsoid(x, y, top, 1, 1, 2, "#70c987");
}

// A tiny treasure chest tucked into the back of the tank.
box(26, 27, 21, 33, 32, 24, "#805332");
box(27, 26, 22, 32, 26, 24, "#b8793e");
box(26, 27, 25, 33, 32, 26, "#bd8144");
box(27, 26, 26, 32, 32, 26, "#e5ab5e");
box(26, 26, 22, 26, 32, 26, "#e4bd72");
box(33, 26, 22, 33, 32, 26, "#e4bd72");
box(29, 25, 23, 30, 26, 25, "#f7d279");
set(29, 24, 24, "#fff1ac");

// Bubbles rising in front of the backdrop.
for (const [x, y, z] of [
  [24, 23, 24], [23, 23, 27], [25, 24, 30], [24, 23, 33],
  [37, 22, 25], [36, 22, 28], [38, 23, 31]
]) {
  set(x, y, z, "#eafffa");
  set(x + 1, y, z + 1, "#d2f5f5");
}

// Front glass highlights and a substantial, readable aquarium frame.
box(6, 12, 18, 41, 13, 19, "#c6edf1");
box(6, 12, 36, 41, 13, 37, "#d5f4f4");
box(6, 12, 18, 7, 13, 38, "#c4edf1");
box(40, 12, 18, 41, 13, 38, "#c4edf1");
box(5, 12, 38, 42, 37, 39, "#6b9ca7");
box(6, 12, 39, 41, 36, 40, "#a7d5dd");
box(8, 11, 40, 39, 12, 40, "#d9f3f2");
box(9, 11, 27, 9, 11, 33, "#e8fbf8");
box(10, 11, 31, 10, 11, 35, "#e8fbf8");
box(38, 11, 23, 38, 11, 29, "#e8fbf8");

// Each goldfish is an independently bobbing part.
part("goldfish-one", [17, 21, 28]);
ellipsoid(17, 21, 28, 3, 2, 2, "#f9a632");
ellipsoid(18, 20, 29, 2, 1, 1, "#ffcc60");
ellipsoid(14, 21, 28, 1, 1, 1, "#e97b24");
ellipsoid(12, 21, 29, 2, 1, 1, "#ffb245");
ellipsoid(12, 21, 27, 2, 1, 1, "#ef8a2c");
line(16, 21, 30, 15, 21, 32, 0, "#f28c2e");
ellipsoid(17, 19, 27, 1, 1, 1, "#f28b2c");
set(19, 19, 29, "#fff8df");
set(20, 18, 29, "#343c45");
set(21, 20, 27, "#e97931");
animate("goldfish-one", { type: "bob", axis: "x", speed: 1, amplitude: 4 });

part("body");
part("goldfish-two", [31, 20, 30]);
ellipsoid(31, 20, 30, 3, 2, 2, "#ed8d2b");
ellipsoid(30, 19, 31, 2, 1, 1, "#ffc459");
ellipsoid(34, 20, 30, 1, 1, 1, "#dc7225");
ellipsoid(36, 20, 31, 2, 1, 1, "#ffb044");
ellipsoid(36, 20, 29, 2, 1, 1, "#f49131");
line(31, 20, 32, 32, 20, 34, 0, "#f5a238");
ellipsoid(31, 18, 29, 1, 1, 1, "#f6a139");
set(29, 18, 31, "#fff8df");
set(28, 17, 31, "#343c45");
set(27, 19, 29, "#e77b2c");
animate("goldfish-two", { type: "bob", axis: "z", speed: 1.5, amplitude: 2 });
part("body");