← Casa completaObjeto 3Dfogon/mesa-de-luz
Mesa de luz
Arrastrá para girarlo// «Mesa de luz» · gpt-6-sol (medium)
// A small bedside table in warm walnut wood: a square box on short legs with one drawer with a round brass knob and an open shelf below holding two books. On top a small lamp with a peach shade and a little alarm clock.
// Warm walnut bedside table
const walnut = "#925b35";
const walnutLight = "#ad7446";
const walnutDark = "#704126";
const walnutDeep = "#57351f";
const honey = "#c58a52";
const brass = "#d7a94c";
const brassLight = "#f3cd70";
// Four short, chunky legs
for (const x of [8, 36]) {
for (const y of [8, 36]) {
box(x, y, 0, x + 3, y + 3, 9, walnutDark);
box(x, y, 1, x + 3, y, 7, walnutLight);
}
}
// Lower shelf, open at the front
box(9, 9, 7, 38, 38, 9, walnut);
box(9, 8, 8, 38, 10, 9, walnutLight);
box(11, 11, 10, 36, 36, 10, honey);
box(8, 9, 10, 11, 39, 26, walnut);
box(36, 9, 10, 39, 39, 26, walnut);
box(9, 36, 10, 38, 39, 26, walnutDark);
// Subtle wood grain on the broad sides and shelf
forEach((x, y, z, color) => {
if (color === walnut && rand() < 0.045) {
set(x, y, z, rand() < 0.5 ? walnutLight : walnutDark);
}
});
// Two books visible through the shelf opening
box(14, 15, 11, 18, 31, 16, "#78b9a6");
box(14, 14, 11, 18, 15, 16, "#5b9d8e");
box(15, 13, 12, 17, 14, 15, "#b8e4d1");
box(14, 16, 16, 18, 30, 16, "#a9d7c2");
box(23, 17, 11, 33, 31, 13, "#718fac");
box(23, 15, 11, 33, 17, 13, "#56748f");
box(24, 14, 12, 32, 15, 12, "#f5e9cc");
box(23, 17, 13, 33, 30, 13, "#97b5ca");
// Drawer frame and inset wooden drawer face
box(10, 8, 17, 37, 11, 26, walnutDeep);
box(12, 6, 19, 35, 8, 25, walnutLight);
box(13, 6, 24, 34, 6, 24, honey);
box(13, 6, 19, 34, 6, 19, walnut);
box(12, 5, 20, 12, 6, 23, walnutDark);
box(35, 5, 20, 35, 6, 23, walnutDark);
for (let x = 15; x <= 33; x += 5) {
if (rand() < 0.75) box(x, 5, 21, x + 2, 5, 21, "#b37a49");
}
// Round brass drawer knob, projecting toward the viewer
cylinder(24, 4, 22, 2, 3, brass, "y");
set(24, 3, 22, brassLight);
// Overhanging tabletop with a bright rounded-looking edge
box(6, 6, 27, 41, 41, 28, walnutDark);
box(6, 6, 29, 41, 41, 29, walnutLight);
box(7, 6, 28, 40, 6, 28, honey);
box(7, 7, 30, 40, 40, 30, "#b77b49");
box(8, 8, 30, 39, 39, 30, "#bd8250");
for (let i = 0; i < 130; i++) {
const x = 9 + Math.floor(rand() * 30);
const y = 9 + Math.floor(rand() * 30);
set(x, y, 30, rand() < 0.5 ? "#c58c56" : "#ad7043");
}
// Little lamp: brass base and stem
ellipsoid(17, 28, 31, 5, 5, 1, brass);
box(14, 25, 31, 20, 31, 31, brassLight);
cylinder(17, 28, 32, 1, 7, brass);
set(17, 27, 34, brassLight);
// Tapered peach fabric shade
for (let z = 35; z <= 42; z++) {
const r = Math.round(8 - (z - 35) * 0.55);
box(17 - r, 28 - r, z, 17 + r, 28 + r, z,
z >= 40 ? "#f8bea5" : "#ecaa92");
box(17 - r + 1, 28 - r, z, 17 + r - 1, 28 - r, z,
z >= 40 ? "#ffd0b1" : "#f6b79d");
}
box(9, 20, 35, 25, 20, 35, "#dc8f7b");
box(13, 24, 42, 21, 32, 42, "#ffd1b3");
// Cheerful little alarm clock beside the lamp
box(29, 18, 30, 30, 20, 31, brass);
box(34, 18, 30, 35, 20, 31, brass);
ellipsoid(32, 19, 35, 5, 4, 5, "#8fb8bf");
ellipsoid(32, 16, 35, 4, 2, 4, "#c9e4df");
cylinder(32, 14, 35, 4, 1, "#fff2dc", "y");
set(32, 13, 38, walnutDark);
set(32, 13, 32, walnutDark);
set(29, 13, 35, walnutDark);
set(35, 13, 35, walnutDark);
line(32, 12, 35, 32, 12, 37, 0, walnutDark);
line(32, 12, 35, 34, 12, 34, 0, walnutDark);
set(32, 11, 35, brass);
sphere(29, 19, 40, 2, brass);
sphere(35, 19, 40, 2, brass);
set(29, 17, 41, brassLight);
set(35, 17, 41, brassLight);
box(31, 18, 40, 33, 20, 41, "#729da5");import { draw } from "./assets/voxel";
import { mesaDeLuz } from "./assets/mesa-de-luz";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, mesaDeLuz, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add mesa-de-luz
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["mesa-de-luz"] })
# Queda en client/assets/mesa-de-luz.ts
# https://fogon.page/object/mesa-de-luz