← Casa completaObjeto 3Dfogon/espejo-de-pie
Espejo de pie
Arrastrá para girarlo// «Espejo de pie» · gpt-6-sol (medium)
// A full-length standing mirror: a tall oval mirror in a light wood frame, tilting slightly back, held between two wooden side posts on a wide base, with a light blue-grey reflection and a lighter diagonal highlight.
// A freestanding, slightly back-tilted oval mirror.
const honey = "#dca45e";
const honeyLight = "#f2c581";
const honeyDark = "#ad713e";
const walnut = "#895738";
const walnutLight = "#ae7548";
const metal = "#d8bd82";
function wood(x0, y0, z0, x1, y1, z1, color) {
box(x0, y0, z0, x1, y1, z1, color);
for (let x = x0; x <= x1; x++)
for (let y = y0; y <= y1; y++)
for (let z = z0; z <= z1; z++)
if (rand() < 0.055) set(x, y, z, "#e6b675");
}
// Wide, low runners with gently stepped ends.
for (const [a, b] of [[7, 12], [36, 41]]) {
wood(a, 12, 0, b, 36, 2, walnut);
wood(a + 1, 10, 0, b - 1, 38, 1, walnutLight);
box(a, 14, 3, b, 34, 3, honey);
box(a + 1, 11, 1, b - 1, 13, 2, honeyLight);
box(a + 1, 35, 1, b - 1, 37, 2, honeyLight);
}
wood(10, 27, 1, 38, 31, 3, honeyDark);
box(11, 27, 4, 37, 29, 4, honeyLight);
box(13, 26, 2, 35, 26, 3, walnutLight);
// Two sturdy side posts, with lighter front edges and rounded-looking caps.
for (const [a, b] of [[8, 11], [37, 40]]) {
wood(a, 23, 3, b, 27, 32, honey);
box(a, 22, 5, b, 22, 29, honeyLight);
box(a, 23, 4, b, 23, 5, honeyDark);
box(a + 1, 23, 33, b - 1, 26, 34, honeyLight);
box(a + 1, 22, 32, b - 1, 25, 33, honey);
box(a, 25, 6, b, 27, 6, walnutLight);
}
// The mirror's centerline moves toward +y as it rises: a visible backward tilt.
const cx = 24, cz = 23.5, rx = 13.1, rz = 19.5;
for (let z = 4; z <= 43; z++) {
const front = Math.round(18 + (z - 4) * 0.18);
for (let x = 10; x <= 38; x++) {
const q = ((x - cx) / rx) ** 2 + ((z - cz) / rz) ** 2;
if (q > 1) continue;
// Solid walnut back and chunky honey-wood outer frame.
for (let y = front + 1; y <= front + 3; y++)
set(x, y, z, y === front + 3 ? walnut : honeyDark);
if (q > 0.76) {
set(x, front, z, q > 0.93 ? honeyDark :
z > 27 || x < 24 ? honeyLight : honey);
if (q > 0.88) set(x, front - 1, z, honey);
} else if (q > 0.70) {
set(x, front, z, "#f5d49b"); // thin bright inner bevel
} else {
// Cool, softly varied glass recessed just behind the bevel.
let color = z > 30 ? "#c4dce1" : z < 15 ? "#a8c4cc" : "#b5d0d7";
if (rand() < 0.055) color = "#c3d9dd";
// Broad diagonal reflection, upper left to lower right.
const diagonal = 27 - 0.39 * (z - 14);
if (Math.abs(x - diagonal) < 2.1 && z >= 12 && z <= 37)
color = Math.abs(x - diagonal) < 0.9 ? "#edf8f5" : "#dbeeee";
set(x, front, z, color);
}
}
}
// Warm wooden pivot knobs on either side of the mirror.
for (const x of [10, 38]) {
box(x - 1, 20, 21, x + 1, 23, 24, honeyDark);
box(x - 1, 19, 22, x + 1, 19, 23, metal);
set(x, 18, 22, "#fff0bc");
}import { draw } from "./assets/voxel";
import { espejoDePie } from "./assets/espejo-de-pie";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, espejoDePie, 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 espejo-de-pie
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["espejo-de-pie"] })
# Queda en client/assets/espejo-de-pie.ts
# https://fogon.page/object/espejo-de-pie